整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Grid.js - 跨框架的前端表格插件

Grid.js - 跨框架的前端表格插件

想简简单单画个表格,但 React,Vue,Angular,…,这么多前端框架,各自都有不同的表格渲染库。就没有表格库能“一次画表,到处运行”吗?来看看 Grid.js 这个跨框架的前端表格插件吧!

简介

Grid.js,是 Github 上 grid-js 组织开源的前端表格插件,代码仓库在 https://github.com/grid-js/gridjs,目前版本为 1.4.2。Grid.js 的标语是

A table library that works everywhere

也即是一个可以到处运行的表格库。Grid.js 没有第三方依赖锁定,其唯一的外部依赖已经被打包在内,意味着它能在所有的前端框架,包括没有框架的情况下使用。

Grid.js 使用 TypeScript 开发,大小仅为 12KB,支持所有现代浏览器,并利用内部管线技术获得了高速性能。

Grid.js表格插件

安装

在 Node.js 环境使用 Grid.js,可使用 npm 进行安装:

npm install gridjs --save

使用时需要导入 Javascript 和 CSS 文件:

import { Grid } from "gridjs";
import "gridjs/dist/theme/mermaid.css";

而在浏览器环境中使用时,可以直接引用 CDN 使用:

<script src="https://unpkg.com/gridjs/dist/gridjs.production.min.js"></script>
<link href="https://unpkg.com/gridjs/dist/theme/mermaid.min.css" rel="stylesheet" />

示例

使用 Grid.js 时,需要一个 div 元素的 wrapper,然后创建一个 Grid.js 的 Grid 实例,定义表格的配置参数,最后调用 render 方法,完成渲染。

一个使用浏览器的例子如下:

<!DOCTYPE html>
<html lang="en">
  <head>
    <link
      href="https://unpkg.com/gridjs/dist/theme/mermaid.min.css"
      rel="stylesheet"
    />
  </head>
  <body>
    <div id="wrapper"></div>
    <script src="https://unpkg.com/gridjs/dist/gridjs.production.min.js"></script>
    <script>
      new gridjs.Grid({
        columns: ["Name", "Email", "Phone Number"],
        data: [
          ["John", "john@example.com", "(353) 01 222 3333"],
          ["Mark", "mark@gmail.com", "(01) 22 888 4444"],
          ["Eoin", "eoin@gmail.com", "0097 22 654 00033"],
          ["Sarah", "sarahcdd@gmail.com", "+322 876 1233"],
          ["Afshin", "afshin@mail.com", "(353) 22 87 8356"]
        ]
      }).render(document.getElementById("wrapper"));
    </script>
  </body>
</html>

可以看到,gridjs.Grid 使用了参数 columns 来定义列,以及 data 来添加各行的数据。类似的,Grid.js 在 React 中的例子如下:

import { Grid } from "gridjs";
import "gridjs/dist/theme/mermaid.css";
function helloWorld () {
  const grid=new Grid({
    columns: ['Name', 'Email', 'Phone Number'],
    data: [
      ['John', 'john@example.com', '(353) 01 222 3333'],
      ['Mark', 'mark@gmail.com',   '(01) 22 888 4444']
    ]
  });
  
  useEffect(()=> {
    grid.render(document.getElementById('wrapper'));
  });
  
  return (
    <div id="wrapper" />
  );
}

不难看出,Grid.js 的使用方法是一致的,两份代码都渲染出了美观的表格。

Grid.js表格示例

Grid.js的设计十分简洁,主要参数包括:

  • data:类型为 T[][] 或 Function,表格每行的数据。data 可以是一个包含各个单元格数据的二维数组,也可以是一个返回可解析为二维数组的函数,以实现异步加载(Promise)和动态加载。
  • from:类型为 HTMLElement,已有的 HTML 表格元素。Grid.js 可以从一个现有的 HTML 的 form 元素生成一个 Grid 表格,添加样式和其他功能。
  • server:远程数据加载。server 是一个包含 url,以及可选的 then 和 opts 的对象,可以根据从 url获取的远程数据渲染表格。
// 使用server参数进行远程数据加载
const grid=new Grid({
  columns: ['Title', 'Director', 'Producer'],
  server: {
    url: 'https://swapi.dev/api/films/',
    then: data=> data.results.map(movie=> [movie.title, movie.director, movie.producer])
  } 
});
  • columns:类型为string[] 或 TColumn[],表格的列定义。TColumn 类型包括名字、宽度、排序和格式器属性,方便对各列进行定制配置。
  • search:搜索功能配置,可以实现简单的客户端关键字搜索,或利用 search.server 配置实现服务器端搜索。

Grid.js搜索

  • pagination:分页功能配置,可以实现客户端或服务端的分页功能。

Grid.js分页

总结

Grid.js 作为一个跨框架的前端表格插件,在各个前端框架中都能使用相同的 API 完成表格的定义和渲染,降低了使用不同框架时的学习成本,避免了各种不同依赖所带来的问题。

同时,Grid.js 作为一个功能丰富的插件,提供了主流表格插件的大部分功能;且设计简洁,性能优越,在一些定制化要求不高的表格应用场景中具有很大的优势。

Grid.js 目前正处在积极开发的阶段,版本号更新较快,有兴趣的开发者可以参与开源贡献。而作为一个 TypeScript 项目,Grid.js 代码结构清晰,值得进一步研究学习。

享一款jQuery表格插件,今天我要介绍的不是DataTables,而是相对没有那么出名的jqGrid,它基于jquery UI主题,同时也支持Bootstrap,能够根据需求使用不同主题。兼容目前主流浏览器,有丰富的配置项和方法事件接口,能够轻松应对一般的表格需求,功能强大,扩展方便,支持多语言。

  • 1、下载及引入jqGrid

    https://github.com/tonytomov/jqGrid

下载jqGrid后,把文件存放到你项目的任意目录中,使用时引入js、css即可,下面以引入Bootstrap样式为例,i18n下的js为语言包,需要注意的是请务必把语言包放在jqGrid的js之前引入,以免后续出现问题。

  • 2、初始化表格

页面中输入<table id="grid-table"></table><div id="grid-pager"></div>,页面基本就这样,然后在js中配置相关信息初始化表格。

下图opt的基本参数,请到api文档查看更多配置属性

在opt中还有一个表格配置属性colModel,该属性就是我们要展示的表头,数据等信息的配置,下图是一个简单的例子。

后台需要返回如下格式的json数据,page为当前页数,records为总共有多少条数据,rows为数据,total为总共页数

最后我们配置完成后是这样的。

刷新页面后大概就是下面的样子,没有真实姓名之后的列和导航栏中的工具按钮。

想要配置工具按钮也很简单,配置以下信息即可,内置按钮有新增、编辑、删除、搜索、刷新、查看按钮,可以添加自定义按钮,内置按钮也可以重写其方法,能够方便的实现我们想要的功能。

  • 3、新增、编辑、删除功能

大致可以分为弹窗和内联两种操作,可以自己进行自定义,也可以跳转页面进行新增、编辑

弹窗

内联

  • 4、页脚汇总和分组

  • 5、分页

分页方式有两种,导航分页和无限滚动分页

导航分页

无限滚动分页

  • 6、其他

还有很多其他的功能如多选、单选、多层次结构展示、排序、搜索过滤等。唯一的缺陷是树形表格,目前它的树形表格配置繁琐,也存在比较的的问题,但也还勉强能接受,希望树形表格在以后能够有所改善。

API文档:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:jqgriddocs

在线演示:http://www.guriddo.net/demo/bootstrap/

趣是最好的老师,HelloGitHub 让你对编程感兴趣!

简介

分享 GitHub 上有趣、入门级的开源项目。

这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、Java、Go、C/C++、Swift...让你在短时间内感受到开源的魅力,对编程产生兴趣!

项目地址:https://github.com/521xueweihan/HelloGitHub

感谢大家点亮的每一个 Star ?


以下为本期内容|每个月 28 号更新

C 项目

1、mgba:用 C 语言实现的 GBA 模拟器。唤起你童年回忆的同时,还能边学边玩,然后再约上三两好友一起看看源码和实现,快乐就是这么简单

地址:https://github.com/mgba-emu/mgba

C++ 项目

2、rocksdb:用 C++ 编写的高性能键值存储引擎。该项目是由 Fackbook 数据库团队基于 levelDB 开发,键值均支持二进制流,能够充分利用多核 CPU 获得高性能,并兼容 levelDB 的 API 可谓是青出于蓝而胜于蓝。RocksDB 当下十分流行,一些开源数据库底层存储用的就是它

地址:https://github.com/facebook/rocksdb

Go 项目

3、learngo:适合新手学习 Go 语法的开源项目。学习一门编程语言最好的方法就是动手写,该仓库拥有 1000 多个 Go 语法的问题,让你可以跟着练并附有答案

地址:https://github.com/inancgumus/learngo

4、tunny:可设置固定数量协程的 goroutine pool 库。通过这个项目可实现 goroutine 重复使用,从而避免过度创建 goroutine 而造成的内存占用过多等问题

package main

import (
 "io/ioutil"
 "net/http"
 "runtime"

 "github.com/Jeffail/tunny"
)

func main() {
 numCPUs := runtime.NumCPU()

 pool := tunny.NewFunc(numCPUs, func(payload interface{}) interface{} {
  var result []byte

  // TODO: Something CPU heavy with payload

  return result
 })
 defer pool.Close()

 http.HandleFunc("/work", func(w http.ResponseWriter, r *http.Request) {
  input, err := ioutil.ReadAll(r.Body)
  if err != nil {
   http.Error(w, "Internal error", http.StatusInternalServerError)
  }
  defer r.Body.Close()

  // Funnel this work into our pool. This call is synchronous and will
  // block until the job is completed.
  result := pool.Process(input)

  w.Write(result.([]byte))
 })

 http.ListenAndServe(":8080", nil)
}

地址:https://github.com/Jeffail/tunny

5、glab:用 Go 写的 GitLab 命令行工具。通过它除了能够在命令行管理项目、issues、合并提交之外,还能够查看 CI 的运行状态

  api:         Make authenticated REST/GRAPHQL
  auth:        Manage glab's authentication state
  issue:       Work with GitLab issues
  label:       Manage labels on remote
  mr:          Create, view and manage merge requests
  ci:          Work with GitLab CI pipelines and jobs
  release:     Manage GitLab releases
  repo:        Work with GitLab repositories and projects

地址:https://github.com/profclems/glab

6、fzf:能够搜“一切”的模糊搜索命令行工具。它能够搜文件、历史命令、进程、git 提交记录等信息,支持预览内容、整合到 Vim/Neovim 编辑器,而且搜索速度极快

地址:https://github.com/junegunn/fzf

7、godis:用 Go 语言写的 Redis 服务器。它实现了 Redis 通信协议并兼容 redis-cli 客户端,包含 5 种常用的数据结构和命令比如:TTL、发布订阅、地理位置以及 AOF 持久化等,Go 的初学者可以通过该项目能够学习到关于 TCP、通信协议实现、常用的数据结构等知识,Web 开发学烦了?换一个口味,写个 Redis 作为实战项目吧

地址:https://github.com/HDT3213/godis

Java 项目

8、ExoPlayer:谷歌官方开源的 Android 媒体播放器。易于定制和扩展,支持丰富的数据格式比如:FMP4、FLV、SmoothStreaming、MP3 等

地址:https://github.com/google/ExoPlayer

9、traccar:GPS 追踪平台。此项目支持 170 多种 GPS 协议,1500 多种型号的 GPS 设备,功能包含:实时 GPS 追踪、数据统计报告、报警和通知等等

地址:https://github.com/traccar/traccar

10、airbyte:一个开源的 EL(T) 平台。能简单快速地把用户提供的应用、数据库等地方的数据聚合到平台,从而可以在一个平台查询、展示、更新、管理这些数据

地址:https://github.com/airbytehq/airbyte

11、Ward:拥有漂亮仪表盘的服务器监控工具

地址:https://github.com/B-Software/Ward

JavaScript 项目

12、moovie.js:专注于电影的 HTML5 播放器。容易上手和使用,支持倍速播放、快捷键操作、字幕偏移即时调整等功能

地址:https://github.com/BMSVieira/moovie.js

13、nativefier:能够把 Web 页面变成本地应用的命令行工具。通过 Electron+Chromium 把网站包装成本地 .app、.exe 等可执行文件,支持运行在 Windows、macOS 和 Linux 操作系统上

地址:https://github.com/nativefier/nativefier

14、lowdb:支持浏览器和 Electron 的轻量级 JSON 文件数据库。如果是创建没有后端的小型前端项目,但还有存储和管理数据的需求,那就快试试 lowdb 吧

import { join } from 'path'
import { Low, JSONFile } from 'lowdb'

// 新建 JSON 文件用于存储数据
const file = join(__dirname, 'db.json')
const adapter = new JSONFile(file)
const db = new Low(adapter)

// 把内容更新到 db.data 并写入 JSON 文件
db.data.posts.push({ id: 1, title: 'lowdb is awesome' }).write()
db.get('posts')
  .filter({title: 'lowdb is awesome'})
  .sortBy('id')
  .take(5)
  .value()

地址:https://github.com/typicode/lowdb

15、eruda:一个专为手机端设计的前端页面调试工具。类似手机端迷你版开发者模式,可用于在手机端调试页面。主要功能包括:显示 console 日志、检查元素状态、捕获 XHR 请求、显示本地存储和 Cookie 等信息

地址:https://github.com/liriliri/eruda

16、cusdis:这是一个界面清爽、注重隐私的轻量级博客评论系统。可以很方便地与 React、Vue 或其他博客系统结合,并且还提供了一个后台来管理所有的评论。除此之外,还支持一键从 Disqus 导入、邮件通知等强大的功能

地址:https://github.com/djyde/cusdis

Kotlin 项目

17、mirai:由 Kotlin 语言编写的 QQ 机器人框架。该项目提供了 Android QQ 协议的 API,通过这些 API 可以实现自动化操作,比如:群管理等功能,注意!该项目不支持一切商业使用。最后项目的 Kotlin 代码写的很好,感兴趣的同学可以去看下源码

地址:https://github.com/mamoe/mirai

Python 项目

18、pygame:用来开发游戏的 Python 库。Pygame 已经持续更新多年,网上的教程和资料十分充足,虽然在游戏开发领域 Python 只是个弟弟,但如果只是用这个库开发个 2D 小游戏还是很顺手的。推荐给想用 Python 写个小游戏的朋友

地址:https://github.com/pygame/pygame

19、GitHubPoster:能够把多个平台上的数据,生成类似 GitHub 绿墙图像的工具。比如能够把发推的频率、扇贝单词打卡等情况生成类似 GitHub 绿墙图像,使用简单感兴趣的同学可以把玩一下

地址:https://github.com/yihong0618/GitHubPoster

20、guietta:用于制作简单 GUI 程序的 Python 库。换一种简单的方式写 GUI(图形用户界面)程序?

from guietta import _, Gui, Quit
gui = Gui(
 [ "Enter numbers:",  "__a__", "+", "__b__", ["Calculate"] ],
 [    "Result: -->", "result",   _,       _,             _ ],
 [                _,        _,   _,       _,          Quit ]
)

with gui.Calculate:
 gui.result = float(gui.a) + float(gui.b)

gui.run()

地址:https://github.com/alfiopuglisi/guietta

Ruby 项目

21、forem:用来构建社区的 Ruby 开源项目。一款开源、现成的论坛项目,能够让你快速搭建起来一个社区平台。国外知名的程序员社区 dev 用的就是它

地址:https://github.com/forem/forem

Rust 项目

22、rustdesk:免费开源的远程桌面软件。开箱即用无需任何配置,支持 Linux/Mac/Win/Android 等平台。还能够自行搭建服务器,由用户自己掌控数据,不必担心隐私数据泄露的问题。在当下越来越多的远程桌面软件都收费的情况下的另一个选择

地址:https://github.com/rustdesk/rustdesk

23、indicatif:样式丰富的 Rust 终端进度条库

use indicatif::ProgressBar;

let bar = ProgressBar::new(1000);
for _ in 0..1000 {
    bar.inc(1);
    // ...
}
bar.finish();

地址:https://github.com/mitsuhiko/indicatif

24、azul:一个跨平台的 Rust 和 C/C++ 的 GUI 框架。使用 WebRender 渲染引擎和 CSS/HTML-like DOM 构建,可用于开发漂亮的原生桌面应用程序

#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]

use azul::prelude::*;
use azul_widgets::table_view::*;

struct TableDemo {
    // cells: BTreeMap<TableCell, String>,
}

extern "C" fn layout(data: &mut RefAny, _: LayoutCallbackInfo) -> StyledDom {

    let mut table_view_state = TableViewState::default();
    table_view_state.set_cell_content(TableCellIndex { row: 2, column: 2 }, "Hello World");
    table_view_state.set_selection(Some(TableCellSelection::from(3, 4).to(3, 4)));

    TableView::new(table_view_state).dom().style(Css::empty())
}

fn main() {
    let app = App::new(RefAny::new(TableDemo { }), AppConfig::new(LayoutSolver::Default));
    app.run(WindowCreateOptions::new(layout));
}

地址:https://github.com/fschutt/azul

Swift 项目

25、Grid:受 CSS Grid 启发,用 SwiftUI 编写关于视图(view)布局的开源项目

地址:https://github.com/exyte/Grid

26、SwiftyJSON:一个 Swift JSON 三方库,用更简单的方式处理 JSON

let json = JSON(data: dataFromNetworking)
if let userName = json[0]["user"]["name"].string {
  //Now you got your value
}

地址:https://github.com/SwiftyJSON/SwiftyJSON

其它

27、aind:实现在 Docker 中启动安卓应用的项目

docker run -td --name aind --privileged -p 5900:5900 -v /lib/modules:/lib/modules:ro ghcr.io/aind-containers/aind
docker exec aind cat /home/user/.vnc/passwdfile

地址:https://github.com/aind-containers/aind

28、librime:一款开源的中文输入法。市面上的输入法有很多,但你找到让自己称心如意的那款了吗?或许通过今天的开源项目你就能找到它。RIME 这款开源的输入法,它不追踪输入的内容源码完全开放,可自由切换繁/简中文,选择/设计输入方案和主题,对繁体字输入尤为优秀。作为输入法给予用户无限的自由和个性化,作为输入法框架让开发者有更多的发挥空间。比如支持不同操作系统的版本:Linux(中州韵)、Windows(小狼毫)、macOS(鼠须管)、Android(同文)由于自由度较高上手需要一些时间,这大概就是获得自由的代价吧

地址:https://github.com/rime/librime

29、android-foss:开源的安卓客户端应用集合

地址:https://github.com/offa/android-foss

30、secguide:腾讯开源的代码安全指南。该项目包含:C/C++、Python、JavaScript、Java、Go 等语言的安全编码指南,内容简单易懂能够帮助开发者,在代码源头规避安全风险减少漏洞

地址:https://github.com/Tencent/secguide

31、Kanmail:以看板的方式管理邮件的客户端应用。适用于 Mac/Windows 操作系统,支持 Gmail、Outlook 等邮箱

地址:https://github.com/Oxygem/Kanmail

32、hello-world:汇集了 800 多种编程语言 Hello World 的项目

地址:https://github.com/leachim6/hello-world

33、material-theme-jetbrains:一款 JetBrains IDE 的 Material 风格主题

地址:https://github.com/ChrisRM/material-theme-jetbrains

开源书籍

34、awesome-fenix:讲述“如何构建大型且可靠的分布式系统”的开源书籍。推荐给想成为架构师的你

地址:https://github.com/fenixsoft/awesome-fenix

35、google-sre-ebook:Google SRE 相关的书籍。Google SRE 是谷歌的专业运维团队的工程师,他们有一个共同的名字:Site Reliability Engineer,而这本书由 Google SRE 们撰写,分享了谷歌运维相关的一些技术和知识

地址:https://github.com/captn3m0/google-sre-ebook

机器学习

36、AugLy:Facebook 开源的一个数据增强 Python 库。该库目前支持音频、图像、文本和视频四种模式,一方面可以用现实数据对数据进行增强,另一方面还可以检测出相似内容,消除重复数据带来的干扰

地址:https://github.com/facebookresearch/AugLy

37、Real-Time-Voice-Cloning:克隆某个人说话声音的 AI 项目。仅需几秒音频,就能模仿出原音频的人声

地址:https://github.com/CorentinJ/Real-Time-Voice-Cloning


HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。

如果在本期月刊找到了感兴趣的开源项目,就赶紧玩起来吧!

以上就是 HelloGitHub 月刊本期的全部内容,下个月 28 号见。