使用事件调用所有extjs存储侦听器实例

时间:2015-02-16 08:07:13

标签: extjs store

我有一家商店并在某个地方使用它。这个类商店有' datachanged'事件,我想他们每个人(实例)做自己的工作。我怎么能这样做?

更新

myStore:calk

Ext.define('FM.store.Calk', {
    extend: 'Ext.data.Store',
    model: 'FM.model.Calk',
    autoLoad: true,
    config: {

    },
    proxy: {
        type: 'ajax',
        //url: 'calk/read/',
        api:{
            read: 'calk/read/',
            update: 'calk/update/'
        },
        reader: {
            type: 'json',
            root: 'calks'
        }
    },
    sorters: [{
        property: 'text',
        direction: 'ASC'
    }],
    listeners: {},

    initComponent: function()
    {
        var me = this;

        Ext.apply(me, {});

        me.callParent(arguments);
    }
});

查看:我使用Store here

之一
Ext.define('FM.view.tree.Panel', {
    // Ext.panel.Panel-specific options:
    extend: 'Ext.tree.Panel',
    alias : 'widget.mmTreePanel',
    requires: [],
    title: "لایه ها",
    width: 300,
    height: 200,
    border: true,
    collapsible: true,
    collapseMode: "mini",
    autoScroll: true,
    rootVisible: false,
    lines: false,

    initComponent: function()
    {
        var me = this;
        var dataNodeChanged = function(e, ee, eee){
            console.log("its fine");

        };

        calkStore = Ext.create('FM.store.Calk',{});

        calkStore.on({"load": dataNodeChanged, this);
        calkStore.on({"datachanged": dataNodeChanged, this);

        var tbar = {
            xtype:  'mmTreeTbar'
        };

        Ext.apply(me, {
            tbar: tbar,
            root: {
                expanded: true,
                children: []
            }
            //displayField: 'name'
        });

        me.callParent(arguments);
    }
});

我的应用:我在这里使用其中一个

Ext.application({
    name: 'FM',
    appFolder: 'app',
    controllers: ['Main'],
    models: ['Calk'],
    stores: ['Calk'],
    autoCreateViewport: true,

    launch: function(){

        var dataNodeChanged = function(){
            console.log("Application Instanse");
        };

        cs = Ext.create('FM.store.Calk',{});


        cs.on({"load": function(){console.log("App Load")}}, this);
        cs.on({"datachanged": function(){console.log("App DataChanged")}}, this);
    }
});

现在在chrom控制台中我运行cs.reload()calkStore.reload()

2 个答案:

答案 0 :(得分:0)

你应该为两个商店添加一个datachanged事件的监听器,然后在监听器处理程序代码中调用你的自定义函数。

store1.on({'datachanged': function(this, options) {
      store1DataChange();
},this);

答案 1 :(得分:0)

商店重装方法不会触发datachanged事件,请参阅此处http://docs.sencha.com/extjs/4.2.0/#!/api/Ext.data.Store-method-reload

相反,你应该听加载事件。

修改

尝试以这种方式监听事件,而不是addListener方法:

store1.on("datachanged", store1DataChange, this);
store1.on("load", store1Load, this);

另外,您确定在调用reload()时是否正在发出服务器请求,如果是,您确定有更新的数据会回来吗?如果没有任何变化,则datachanged事件不会触发。