我有一家商店并在某个地方使用它。这个类商店有' 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()
答案 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事件不会触发。