Backgrid.js 基于 Backbone.js 用于构建语义表格组件

发布于 2020-09-17 17:17:46 字数 6126 浏览 1619 评论 0

Backgrid.js 是一个基于 Backbone.js 用于构建语义和容易样式化的 HTML 表格组件。提供简单、直观的编程接口,Backgrid.js 目标是生成一组核心主干 UI 元素,为您提供您所期望的所有基本显示、排序和编辑功能,并创建一个优雅的 API,使扩展 Backgrid.js 更容易。

特点

  • 响应式,表格的相关样式在修改数据后立即呈现。
  • 简单实用,只需使用简单的 CSS 样式,就像普通的 HTML 表格一样。
  • 高度模块化和可定制。组件只是简单的主干视图类,如果您已经知道主干,那么定制就很容易了。
  • 轻量级,额外的功能已经被剥离成扩展,你可以很方便的使用这个扩展丰富您的项目
  • 良好的测试用例。

兼容性

  • Internet Explorer 8 [2]
  • Internet Explorer 9+
  • Chrome 4+
  • Safari 4+
  • Firefox 4+
  • Opera 9+

支持上述浏览器的桌面和移动版本。

依赖关系

Backgrid.js 依赖于3个库来运行:

 

安装

自0.3.0以来,BackGrid引入了对通过AMD和CommonJS加载的支持。

AMD

如果您使用AMD,建议您使用 bower

$ bower install backgrid

而 Backgrid.js 没有直接支持 对于 AMD,您可以使用 RequireJS shim 选项。

CommonJS

如果你喜欢CommonJS,组件 是一个很好的 Web 组件管理器,它同时构建了 JS 和 CSS 资源:

$ npm install backgrid

老式的方式

您也可以下载 Backgrid core 及其多样性 扩展 并引用 HTML 中的相关文件。

基本实例

收集与模型

在网格中显示任何表格数据之前,必须先获取数据。

在最基本的级别上,BackGrid假装每一行都是一个模型对象,整个表由一个简单的主干集合支持。

假设我们有一个区域信息对象列表:

var Territory = Backbone.Model.extend({});
var Territories = Backbone.Collection.extend({
   model: Territory,
   url: "examples/territories.json"
});
var territories = new Territories();

格网

BackGrid 包的主要入口点是 Backgrid.Grid 类。您可以通过首先定义一些列来创建默认的 BackGrid,然后将该列列表和数据收集放到 Grid 构造函数中,如下所示:

var columns = [{
    name: "id", // The key of the model attribute
    label: "ID", // The name to display in the header
    editable: false, // By default every cell in a column is editable, but *ID* shouldn't be
    // Defines a cell type, and ID is displayed as an integer without the ',' separating 1000s.
    cell: Backgrid.IntegerCell.extend({
      orderSeparator: ''
    })
  }, {
    name: "name",
    label: "Name",
    // The cell type can be a reference of a Backgrid.Cell subclass, any Backgrid.Cell subclass instances like *id* above, or a string
    cell: "string" // This is converted to "StringCell" and a corresponding class in the Backgrid package namespace is looked up
  }, {
    name: "pop",
    label: "Population",
    cell: "integer" // An integer cell is a number cell that displays humanized integers
  }, {
    name: "percentage",
    label: "% of World Population",
    cell: "number" // A cell type for floating point value, defaults to have a precision 2 decimal numbers
  }, {
    name: "date",
    label: "Date",
    cell: "date"
  }, {
    name: "url",
    label: "URL",
    cell: "uri" // Renders the value in an HTML anchor element
}];

// Initialize a new Grid instance
var grid = new Backgrid.Grid({
  columns: columns,
  collection: territories
});

// Render the grid and attach the root to your HTML document
$("#example-1-result").append(grid.render().el);

// Fetch some countries from the url
territories.fetch({reset: true});

列定义列表 Backgrid.Grid 期望的只是一个 JSON 对象的列表,您可以将其硬编码到 HTML 模板中,或者在 DOM 准备就绪时从服务器检索。BackGrid 并不关心列定义来自何处,只要您将列表提供给 Grid 构造函数。

正如预期的那样,现在显示了一个基本的可编辑数据网格。默认情况下,所有列的标题都是标记和可排序的。ID 单元格不可编辑,并且所有其他单元格类型都内置了合理的验证。如果表太大,就会得到一个滚动条。

完整示例

如果您有像上面这样大的结果集,您可能希望能够分页和过滤结果。这在Backgrid.js中很容易实现。

Js附带了许多 过滤器 和一个 分页器 扩展,您可以将其加载到自己的代码中。

若要使用分页器,必须首先将集合声明为 Backbone.PageableCollection,它是 Backbone.js 集合的一个简单子类,具有添加的分页行为。

var PageableTerritories = Backbone.PageableCollection.extend({
  model: Territory,
  url: "examples/pageable-territories.json",
  state: {
    pageSize: 15
  },
  mode: "client" // page entirely on the client side
});

var pageableTerritories = new PageableTerritories();

// Set up a grid to use the pageable collection
var pageableGrid = new Backgrid.Grid({
  columns: [{
    // enable the select-all extension
    name: "",
    cell: "select-row",
    headerCell: "select-all"
  }].concat(columns),
  collection: pageableTerritories
});

// Render the grid
var $example2 = $("#example-2-result");
$example2.append(pageableGrid.render().el)

// Initialize the paginator
var paginator = new Backgrid.Extension.Paginator({
  collection: pageableTerritories
});

// Render the paginator
$example2.after(paginator.render().el);

// Initialize a client-side filter to filter on the client
// mode pageable collection's cache.
var filter = new Backgrid.Extension.ClientSideFilter({
  collection: pageableTerritories,
  fields: ['name']
});

// Render the filter
$example2.before(filter.render().el);

// Add some space to the filter and move it to the right
$(filter.el).css({float: "right", margin: "20px"});

// Fetch some data
pageableTerritories.fetch({reset: true});

相关链接

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

醉城メ夜风

文章 0 评论 0

远昼

文章 0 评论 0

平生欢

文章 0 评论 0

微凉

文章 0 评论 0

Honwey

文章 0 评论 0

qq_ikhFfg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文