我正在尝试编写一个可重用的项目选择面板,其中用户有一个网格,其中包含他可以选择的项目和一个可以用来过滤网格内容的小文本字段。现在(简化的)视图代码看起来像这样并且可以工作。
Ext.define('MyApp.view.items.ItemSelectorPanel', {
extend: 'Ext.panel.Panel',
require: 'MyApp.view.items.SimpleItemGrid',
alias: 'widget.ItemSelectorPanel',
layout: 'form',
config: {
itemStore: false
},
constructor: function(config) {
this.initConfig(config);
this.superclass.constructor.call(this, config);
this.add([
{
fieldLabel: 'Filter',
name: 'filter'
},
{
xtype: 'SimpleItemGrid',
collapsible: true,
store: this.getItemStore()
}
]);
return this;
}
});
如您所见,ItemSelectorPanel
使用该config
属性来公开一个接口,调用站点可以在该接口中指定要使用的项目商店。
调用站点(在这种情况下,面板被添加到 TabPanel):
var panelToAdd = {
xtype: 'panel',
title: 'New Selection',
closable: true,
padding: 10,
items: [{
title: 'Select node',
xtype: 'ItemSelectorPanel',
itemStore: itemStore
}]
};
现在,我喜欢 ExtJS 4 的声明式风格以及它如何帮助遵循 MVC 模式。我希望视图中的代码量尽可能少。不幸的是,这不起作用:
Ext.define('MyApp.view.items.ItemSelectorPanel', {
/* ... same as above ... */
constructor: function(config) {
this.initConfig(config);
this.superclass.constructor.call(this, config);
return this;
},
items: [
{
fieldLabel: 'Filter',
name: 'filter'
},
{
xtype: 'SimpleItemGrid',
collapsible: true,
store: this.getItemStore // <-- interesting part
}
]
});
config
有没有办法通过父属性的属性以声明方式公开嵌套/子组件的配置?