使用事件调用所有extjs存储侦听器Instance
我有一家商店,在某个地方使用。这个类存储有“datachanged”事件,我希望它们中的每一个(实例)都做自己的工作。我该怎么做 更新: myStore:calk使用事件调用所有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',
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两次。您能发布完整的代码吗?这样我就可以看到您现在在做什么了