Bry*_*ynJ 2 alias scope extjs extjs4 xtype
我有一个视图,其中包含带有2个选项卡的选项卡控件.我已为每个选项卡定义了一个别名,格式如下:
alias: 'widget.contenttab'
Run Code Online (Sandbox Code Playgroud)
我试图访问控制器中的'contenttab',但它说它没有定义:
contenttab is not defined
Run Code Online (Sandbox Code Playgroud)
我试图在控制器的选择处理程序中设置选项卡的html内容:
Ext.define('BP.controller.Induction', {
extend: 'Ext.app.Controller',
views: [
'induction.Binder',
'induction.LeftPage',
'induction.RightPage',
],
stores: [
'Sections',
'Categories',
'Tasks'
],
models: [
'Section',
'Category',
'Task'
],
init: function() {
this.control({
'grid[xtype=categorygrid]': {
itemclick: this.onItemClick
}
});
console.log('Initialized Induction!');
},
onItemClick: function(e, d) {
console.log(d.data.category_id);
this.getCategoriesStore().load({params:{'id':d.data.category_id}}, {
success: function(category) {
console.log("Category: " + category.get('name'));
},
error: function(e) {
console.log(e);
}
});
contenttab.html = 'test'; // produces error
}
});
Run Code Online (Sandbox Code Playgroud)
'contenttab'位于我的RightPage视图中.产生错误的行最终需要驻留在成功回调函数中 - 但这不会被解雇(我在这里为此问题创建了另一个问题Extjs存储加载成功处理程序未被解雇
任何指导表示赞赏,谢谢.
在您的情况下,您应该使用ComponentQuery来接收选项卡实例.我想你至少会知道你的标签的名称,所以你可以这样做
var single = Ext.ComponentQuery.query('contenttab[title=YourTabName]')[0];
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要该类型的所有选项卡.
var list = Ext.ComponentQuery.query('contenttab');
Run Code Online (Sandbox Code Playgroud)
结果将始终是一个数组,我在第一个例子中使用了数组选择器.您可以随时执行此操作以获取实例.但是,对于同一个实例,您执行此操作的次数越多,我建议您将实例存储为局部变量.特别是当你在循环中的路上.
这也是参考控制器中属性,它会自动为您执行一些操作.一些例子:
refs: [
{
ref: 'firstTab',
selector: 'contenttab[title=YourTabName]'
}
]
Run Code Online (Sandbox Code Playgroud)
这将创建一个名为getFirstTab()(注意auto camel-case)的方法,该方法引用您的选项卡(基于提供的查询).请注意,还有更多选项autocreate.我必须说,我从来没有使用过这个,但它为你包装了一些在启动时可能很好的东西.
回答您对上一个问题的最后评论:是的,这是正确的方法.
| 归档时间: |
|
| 查看次数: |
4802 次 |
| 最近记录: |