【问题标题】:get wrong instance with binding to onSelectedRowsChanged for Multiple SlickGrid为 Multiple SlickGrid 绑定到 onSelectedRowsChanged 时得到错误的实例
【发布时间】:2013-12-19 07:57:32
【问题描述】:

我在一个对象中有两个 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 事件的成功回调之后生成的。所以在我的情况下,进行了两次调用,都返回数据;然后创建一个网格来表示数据。

【问题讨论】:

  • 我认为您的意思是在 ObjectType 上添加事件,而不是在 ObjectInstance 上。您想定义一次函数,然后随时调用它。 Slick.Grid.onSelected.subscribe(function(e, data){});
  • @EricG:根据文档 (github.com/mleibman/SlickGrid/wiki/Grid-Events),您需要订阅一个 gridInstance。对我来说是合乎逻辑的,因为每个实例都在它自己的范围内(并监听它自己的绑定)。
  • 好的,我明白了。但是,您不是订阅了错误的实例吗..?
  • 不,我在调用g后将监听器添加到registerPlugin函数(在succes函数内部)。编辑了我的代码,我的描述可能会导致 EricG 的假设。

标签: javascript jquery slickgrid


【解决方案1】:

我在阅读此 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)
}

【讨论】:

    猜你喜欢
    • 2015-06-30
    • 2023-01-04
    • 1970-01-01
    • 2012-11-18
    • 2011-11-26
    • 2017-08-03
    • 2011-11-20
    • 2011-07-02
    • 1970-01-01
    相关资源
    最近更新 更多