Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Extjs 存储区具有数据后激发的事件_Extjs_Extjs6 Classic - Fatal编程技术网

Extjs 存储区具有数据后激发的事件

Extjs 存储区具有数据后激发的事件,extjs,extjs6-classic,Extjs,Extjs6 Classic,我有一个代理存储,它通过两种不同的方式填充—要么通过加载数据,要么通过加载 我有一些行动,应该发生在商店被填满之后;即,应搜索并选择某个记录: preselectByName:function(name, groupName) { var store = this; if(store.preselected) return; store.preselected = true; store.on('load',function() { store.s

我有一个代理存储,它通过两种不同的方式填充—要么通过
加载数据
,要么通过
加载

我有一些行动,应该发生在商店被填满之后;即,应搜索并选择某个记录:

preselectByName:function(name, groupName) {
    var store = this;
    if(store.preselected) return;
    store.preselected = true;
    store.on('load',function() {
        store.selectByName(name, groupName);
        store.preselected = false;
    },store,{single:true});
}
这样称呼:

if(store.isLoaded) store.selectByName(name, groupName);
else store.preselectByName(name, groupName);
如果存储通过
load
填充,但不是通过
loadData
填充,则此代码可以正常工作

  • load
    loadRecord
    是否都触发了另一个事件
  • 否则,我将如何实现一个侦听器来触发这两个事件中的任何一个,以先发生的为准
      • datachanged
        ()
      是一个从
      load
      loadRecord
      触发的事件,但请注意,它是从对数据集所做的任何更改触发的

      此外:我通常使用它来查找ExtJs中需要的事件:

      Ext.util.Observable.capture(myObj, function(evname) {console.log(evname, arguments);})
      
      它捕获
      myObj
      组件触发的所有ExtJs事件,并将其记录到控制台

      • 或者,您可以创建一个自定义事件,在
        load
        loadData
        之后手动触发,如:
      store.on(“load”,function(){store.firevent(“myload”)})

      store.loadData(…)

      store.fireEvent(“myload”)

      然后

      on(“myload”,function(){…})


      load事件专门用于从远程数据源读取数据。商店可以扩展以引入满足您需求的事件

      /*
          @event loadrecords Fires whenever records a loaded into the store.
              @param {Ext.data.Model[]} records An array of records
      */
      Ext.define('MyApp.data.Store', {
          extend: 'Ext.data.Store',
      
          load: function() {
              this.callParent(arguments);
              this.fireLoadRecords();
              return this;
          },
      
          fireLoadRecords: function() {
              this.fireEvent('loadrecords', this.getRange());
          },
      
          loadRecords: function(records, options) {
              this.callParent(arguments);
              this.fireLoadRecords();
          }
      });
      

      是的,
      datachanged
      触发太频繁可能是一个问题。我会查出来的;但是,由于存储中的记录可以以表单编辑,我只想在
      load
      loadData
      上启动,我不确定这是正确的做法。也许你可以尝试一下:你可以尝试将代理改为
      内存代理,而不是
      loadData()
      ,将
      data
      属性设置为所需的数据,然后
      load()
      ,最后在
      load事件中将代理更改回原始。我没有测试这个,只是一个想法。也许有点叮当作响。