javascript – SlickGrid:使用DataView而不是原始数据的简单示例?

前端之家收集整理的这篇文章主要介绍了javascript – SlickGrid:使用DataView而不是原始数据的简单示例?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用SlickGrid,将数据从Ajax调用直接绑定到网格.它现在运行良好,网格动态更新,可排序,我正在为一列使用自定义格式化程序:
var grid;
var columns = [{
  id: "time",name: "Date",field: "time"
},{
  id: "rating",name: "Rating",formatter: starFormatter // custom formatter 
}
];
var options = {
  enableColumnReorder: false,multiColumnSort: true
};
// When user clicks button,fetch data via Ajax,and bind it to the grid. 
$('#mybutton').click(function() {
  $.getJSON(my_url,function(data) {
    grid = new Slick.Grid("#myGrid",data,columns,options);
  });
});

但是,我想根据数据的值将一个类应用到网格中的行中,所以出现在need to use a DataView instead. DataView example on the SlickGrid wiki是相当复杂的,并且有各种额外的方法.

有人可以解释一下,如何简单地将数据转换为DataView – 最初和Ajax重新加载,同时让网格可排序,并继续使用我的自定义格式化程序? (我不需要知道如何应用该类,从字面上来说就是如何使用DataView.)

我希望它在.getJSON调用中是一两条额外的行,但我担心这可能比这更复杂.

解决方法

关键是将数据视图作为数据源进行初始化,连接事件,使网格响应dataview中的变化,最后将数据提供给dataview.它应该看起来像这样:
dataView = new Slick.Data.DataView();
grid = new Slick.Grid("#myGrid",dataView,options);

// wire up model events to drive the grid
dataView.onRowCountChanged.subscribe(function (e,args) {
  grid.updateRowCount();
  grid.render();
});

dataView.onRowsChanged.subscribe(function (e,args) {
  grid.invalidateRows(args.rows);
  grid.render();
});

// When user clicks button,and bind it to the dataview. 
$('#mybutton').click(function() {
  $.getJSON(my_url,function(data) {
    dataView.beginUpdate();
    dataView.setItems(data);
    dataView.endUpdate();
  });
});

请注意,您不需要每次都创建一个新网格,只需将数据绑定到dataview.

如果要实施排序,还需要告诉dataview在网格接收到排序事件时进行排序:

grid.onSort.subscribe(function (e,args) {
  sortcol = args.sortCol.field;  // Maybe args.sortcol.field ???
  dataView.sort(comparer,args.sortAsc);
});

function comparer(a,b) {
  var x = a[sortcol],y = b[sortcol];
  return (x == y ? 0 : (x > y ? 1 : -1));
}

(这个基本排序是从SlickGrid示例中获取的,但是您可能想要实现一些本地化的东西;例如,不使用全局变量)

原文链接:https://www.f2er.com/js/152625.html

猜你在找的JavaScript相关文章