一旦商店有数据就会触发的事件

时间:2017-04-19 08:39:13

标签: extjs extjs6-classic

我有一个代理商店,通过两种不同的方式填写 - 通过loadDataload

一旦商店被填满,我会采取某些行动;即,应搜索和选择某个记录:

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填充此代码,则此代码可以正常工作。

  • 是否还有loadloadRecord
  • 触发的其他事件
  • 我还能如何实现一个触发任何两个事件的侦听器,以先到者为准?

2 个答案:

答案 0 :(得分:1)

是一个从loadloadRecord触发的事件,但请注意,它会因对数据集所做的任何更改而触发。

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

Ext.util.Observable.capture(myObj, function(evname) {console.log(evname, arguments);})

它捕获由myObj组件触发的所有ExtJs事件,并将其记录到控制台。

  • 或者您可以创建自定义事件,您可以在loadloadData之后手动触发,例如:
  

store.on("负载",函数(){store.fireEvent(" myload")})

  

store.loadData(...)

     

store.fireEvent(" myload&#34)

然后

  

store.on(" myload",函数(){...})

答案 1 :(得分:1)

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();
    }
});

http://docs.sencha.com/extjs/6.2.0/classic/Ext.data.ProxyStore.html#event-load