Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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存储侦听器Instance_Extjs_Store - Fatal编程技术网

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

使用事件调用所有extjs存储侦听器Instance,extjs,store,Extjs,Store,我有一家商店,在某个地方使用。这个类存储有“datachanged”事件,我希望它们中的每一个(实例)都做自己的工作。我该怎么做 更新: myStore:calk Ext.define('FM.store.Calk', { extend: 'Ext.data.Store', model: 'FM.model.Calk', autoLoad: true, config: { }, proxy: { type: 'ajax',

我有一家商店,在某个地方使用。这个类存储有“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);
    }
});
视图:我使用这里的一家商店

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

,您只需为两个存储区的datachanged事件添加一个侦听器,然后在侦听器处理程序代码中调用自定义函数即可

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

store reload方法不会触发datachanged事件,请参见此处

相反,您应该侦听加载事件

编辑

尝试通过以下方式侦听事件,而不是addListener方法:

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

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

您是否在询问如何正确处理此事件?不太清楚您能否改进您的问题,请描述您迄今为止尝试的内容?请检查我的更新您不应使用Ext.create('FM.store.Calk',{});在启动功能中。商店将自动为您创建。您应该使用storeId配置您的商店,然后在启动函数中使用Ext.getStore('myStoreId')获取对商店的引用。您正在有效地创建同一存储区的多个实例。是否可以更新您的代码,以便我可以准确地看到您在做什么?AddLester应该是addListener。另外,您如何在存储中添加和更新记录?好的,但是您如何在代码中修改记录?datachanged事件只有在记录以某种方式被添加或更新时才会触发,因此您必须在某个地方有执行此部分的代码?我的记录在服务器中修改,我重新加载存储。您是否在存储上使用load()或reload()?如果我使用store1.reload(),执行store1DataChange(),如果我使用store2.reload(),执行store2DataChange()(.每次加载\重新加载存储时是否使用相同的参数,或者这些参数是否会更改?能否更新显示代理工作方式的代码?另外,请参阅我在回答中关于使用.on()方法的最新编辑我会根据您的要求更改代码,然后重新加载()响应与第一个响应不同。因为我添加了2个事件,所以只有store1DataChange()Execute两次。您能发布完整的代码吗?这样我就可以看到您现在在做什么了