当单元的红色标记被删除或已知保留时,ExtJs 6检查列侦听器

时间:2018-08-23 09:50:52

标签: extjs callback extjs6 extjs6-classic

我有一张带有checkcolumn( Ext.grid.column.Check )项目的表。

(取消)检查项目时,会立即对后端执行ajax回调。

有两个结果:
-由后端成功处理,标志消失,或者
-旗帜停留。但是从用户的角度来看这并不确定。

在通话过程中,单元格的左上角会显示一个红色的小标志。
如果后端调用返回成功,则删除红色标记;否则,红色标记将被删除。否则它会保留。

现在,当ajax调用返回时,我需要一个监听器回调。

https://docs.sencha.com/extjs/6.0.0/classic/Ext.grid.column.Check.html#events上有很多听众,但我找不到能帮助我解决问题的人。

我为什么要问? -我想在后端调用期间显示整个页面范围内不可修改的等待层/图标。调用完成后,无论完成如何成功,都必须删除该层。

2 个答案:

答案 0 :(得分:0)

您的checkcolumn是与grid绑定的store的一部分。 checkcolumn与同步本身无关。同步是store的一部分。显然,由于您告诉我们每当您单击复选框时都会执行同步,因此您已将存储设置为autoSync: true,这限制了您的选择,因为它隐藏了工作并且不直观地允许您向其中添加同步回调商店。

如果您手动进行同步,则可以向同步添加回调:

store.sync({
    callback: function(batch) {
        ...
    }
});

当XmlHttpRequests完成时,无论其结果如何,都将执行此回调;然后您可以检查每个批次的状态或商店的状态并采取相应措施(例如MessageBox)。

此外,您可以覆盖商店上的onEndUpdate函数,并将回调选项添加到在那里触发的同步中。

答案 1 :(得分:0)

要解决我的问题,我确实必须使用 Ext.data.Store 实现。
选中operation值对我来说就解决了。

Ext.define('MyDataStorage', {

  extend: 'Ext.data.Store',
  ...
  autoLoad: true,
  autoSync: true,
  remoteFilter: true,
  remoteSort: true,

  listeners: {

      update: function(store, record, operation, modifiedFieldNames, details, eOpts) {

         if ( 'commit' == operation ) {
            Ext.ComponentQuery.query('#someList')[0].doSomething();
         }
      },
  }
});

autoSync:true的设置就像猜测的Alexander一样。我无法以其他方式进行同步。

感谢Alexander的专业知识和提示。