我在一个对象中有两个slickGrids:
instances: {
registered: {
selector: '##one',
slickGrid: null
},
registeredPending: {
selector: '##two',
slickGrid: null
}
}
它们都填充了从AJAX请求中获取的数据并创建了网格:
success: function(ajaxData) {
var data = [];
// ... parse ajaxData to data
//instance is either instances.registered or instances.registeredPending
instance.slickGrid = new Slick.Grid(instance.selector, data, grid.columns, grid.options);
instance.slickGrid.setSelectionModel(new Slick.RowSelectionModel({selectActiveRow: false}));
instance.slickGrid.registerPlugin(checkboxSelector) //Add checkbox plugin
instance.slickGrid.onSelectedRowsChanged.subscribe(function(e, data){
//data.grid is last created slickGrid instance, instead of slickGrid of selected rows
//It seems data.rows are the selected rows of the right slickGrid table!
}
}
一切正常,只有对onSelectedRowsChanged事件的订阅不能正常工作。事件响应很好,但它返回最后创建的实例,而不是更改行的实例。
修改
要清楚,两个实例都是在AJAX事件的成功回调之后进行的。所以在我的情况下,进行两次调用,都返回数据;之后,创建一个网格来表示数据。
答案 0 :(得分:0)
我在阅读此Google网页后发现了问题:https://groups.google.com/forum/#!topic/slickgrid/mKZzBxl2cVM。
我确实有两个实例,但是他们都使用相同的checkboxSelector
变量注册了Checkboxselectcolumn插件。结果交织在一起。
知道这一点,修复它很容易。为每个实例添加一个变量:
instances: {
registered: {
selector: '##one',
slickGrid: null,
checkboxSelector: new Slick.CheckboxSelectColumn({ cssClass: "slick-cell-checkbox" })
},
registeredPending: { ... }
}
在注册插件时使用那个。
success: function(ajaxData) {
...
instance.slickGrid.registerPlugin(instance.checkboxSelector)
}