在我的应用程序中,我在工具栏中有一个按钮。如果我执行代码后点击此按钮打开一个窗口:
[...]
onClick: function() {
this.windowControl = this.getController('attributesearch.Window');
this.windowControl.init();
this.windowControl.showWindow();
}
[...]
此窗口包含一些输入字段和带存储的组合框:
Ext.define('EM.store.AttributeQuery', {
requires: ['EM.model.AttributeQuery'],
model: 'EM.model.AttributeQuery',
proxy: {
type: 'ajax',
url: './app/configuration/AttributeQueries.json',
reader: {
type: 'json',
root: 'queries'
}
},
autoLoad: true
});
在我的窗口控制器的init方法中,我想添加一个 onLoad-listener
我尝试将此监听器添加到商店:
init: function() {
this.getAttributeQueryStore().on('load', this.onStoreLoad, this);
this.control({
'attributeSearchWindow': {
afterrender: this.onWindowRendered
}
});
},
init方法this.getAttributeQueryStore().on('load', this.onStoreLoad, this);
中的第一行产生以下错误:
Uncaught TypeError: Object [object Object] has no method 'on' app/controller/attributesearch/Window.js:9
.
似乎商店没有完全(或正确)实例化。我错过了什么?
修改
this.getAttributeQueryStore()
的控制台输出是:
constructor {self: function, superclass: Object, config: emptyFn, initConfigList: Array[0], initConfigMap: Object…}
__proto__: TemplateClass
$className: "EM.store.AttributeQuery"
autoLoad: true
config: emptyFn
configMap: TemplateClass
initConfigList: Array[0]
initConfigMap: Object
model: "EM.model.AttributeQuery"
proxy: Object
requires: Array[1]
self: function constructor() {
superclass: Object
__proto__: Object
}
答案 0 :(得分:0)
为什么不定义商店的聆听者作为商店定义的一部分?
Ext.define('EM.store.AttributeQuery', {
requires: ['EM.model.AttributeQuery'],
model: 'EM.model.AttributeQuery',
proxy: {
type: 'ajax',
url: './app/configuration/AttributeQueries.json',
reader: {
type: 'json',
root: 'queries'
}
},
autoLoad: true,
listeners: {
load: function(store, records, options) {
EM.getApplication().getController('attributesearch.Window').onStoreLoad(store, records, options);
}
}
});
答案 1 :(得分:-1)
这是我自己的错。
如果您仔细查看我的商店定义,您会看到我忘记插入extent: 'Ext.store.Store'
。而已。现在我可以像我期望的那样添加和删除听众。
谢谢大家。