如何从控制器中获取视图中的元素?

Gib*_*boK 0 extjs sencha-touch sencha-touch-2

我正在使用Sencha Touch 2,0,1.

我需要从Controller中的View中获取一个元素.

目前我使用此方法正确获取View,但我无法在View中获取Item.我没有得到任何错误,只是测试未定义.

有任何想法吗?

在控制器中:

var test = this.getDetailView().items['editButton'];
Run Code Online (Sandbox Code Playgroud)

视图中的代码:

Ext.define('XXX.view.DetailView',{
   ...

   items: [

        {
            xtype: 'button',
            text: 'Edit XXX',
            ui: 'custom-btn-dwn-timetable',
            itemId: 'editButton'
        }
  ],
    ...
}
Run Code Online (Sandbox Code Playgroud)

Sas*_*ato 5

还有其他几种方法可以获得对编辑按钮的引用.您可以将编辑按钮连接为如下所示的参考:

Ext.define('MyApp.Controller', {
    extend: 'Ext.app.Controller',

    config: {
        refs: {
            editButton: '#editButton'
        }
    },
Run Code Online (Sandbox Code Playgroud)

然后在您的控制器中,您可以调用自动生成的getter this.getEditButton()来获取实际的编辑按钮组件.

您可以做的另一件事是将编辑按钮保存为视图中的实例变量,如下所示:

Ext.define('XXX.view.DetailView',{
   ...

   items: [

        this.editButton = Ext.widget{(
            xtype: 'button',
            text: 'Edit XXX',
            ui: 'custom-btn-dwn-timetable',
            itemId: 'editButton'
        )}
  ],
    ...
}
Run Code Online (Sandbox Code Playgroud)

所以现在要访问您必须执行的控制器中的按钮: this.getDetailView().editButton

一般来说,如果一个元素是你经常访问的东西,你应该有一个保存的引用,而不是查询DOM(以避免不必要的性能损失).由于执行堆栈,使用Ext.getCmp()的速度也较慢(每次只需要通过ComponentManager获取引用).