想簡簡單單畫個表格,但 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的設計十分簡潔,主要參數包括:
// 使用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])
}
});
Grid.js搜索
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 號更新
1、mgba:用 C 語言實現的 GBA 模擬器。喚起你童年回憶的同時,還能邊學邊玩,然后再約上三兩好友一起看看源碼和實現,快樂就是這么簡單
地址:https://github.com/mgba-emu/mgba
2、rocksdb:用 C++ 編寫的高性能鍵值存儲引擎。該項目是由 Fackbook 數據庫團隊基于 levelDB 開發,鍵值均支持二進制流,能夠充分利用多核 CPU 獲得高性能,并兼容 levelDB 的 API 可謂是青出于藍而勝于藍。RocksDB 當下十分流行,一些開源數據庫底層存儲用的就是它
地址:https://github.com/facebook/rocksdb
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
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
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
17、mirai:由 Kotlin 語言編寫的 QQ 機器人框架。該項目提供了 Android QQ 協議的 API,通過這些 API 可以實現自動化操作,比如:群管理等功能,注意!該項目不支持一切商業使用。最后項目的 Kotlin 代碼寫的很好,感興趣的同學可以去看下源碼
地址:https://github.com/mamoe/mirai
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
21、forem:用來構建社區的 Ruby 開源項目。一款開源、現成的論壇項目,能夠讓你快速搭建起來一個社區平臺。國外知名的程序員社區 dev 用的就是它
地址:https://github.com/forem/forem
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
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 號見。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。