我在一个对象中有两个 slickGrid:
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 事件成功回调后创建的。所以在我的例子中,进行了两次调用,都返回数据;之后创建一个网格来表示数据。
最佳答案
我在阅读此 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)
}
关于javascript - 对于多个 SlickGrid 绑定(bind)到 onSelectedRowsChanged 时得到错误的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20676236/