2013-02-13 69 views
0

我正在使用Sencha Touch 2,0,1。如何从控制器获取视图中的元素?

我需要在控制器的查看得到的元素。

在我用这个方法,它正确地获取视图的那一刻,但我没能获得该项目的视图。我没有得到任何错误,只是测试是未定义的。

任何想法?

在控制器:

var test = this.getDetailView().items['editButton']; 

代码在浏览:

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

    items: [ 

     { 
      xtype: 'button', 
      text: 'Edit XXX', 
      ui: 'custom-btn-dwn-timetable', 
      itemId: 'editButton' 
     } 
    ], 
    ... 
} 

回答

1

您可以使用Ext.ComponentQuery在这种情况下,让您的按钮:

Ext.ComponentQuery.query('#editButton')[1]; 
+0

感谢它的工作原理,请问你如何隐藏选定的元素?谢谢 – GibboK 2013-02-13 10:07:15

+0

我想你只需要使用[hide](http://docs.sencha.com/touch/2-0/#!/api/Ext.Button-method-hide)方法 – Eli 2013-02-13 10:12:17

+0

这并不适用于我,它找不到itemId – 2013-11-15 23:30:47

1

你可以尝试设置您的按钮id来edit然后

Ext.getCmp('edit').hide(); 
5

有几个其他的方式来获得参考编辑按钮。您可以连接编辑按钮为裁判这样的:

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

    config: { 
     refs: { 
      editButton: '#editButton' 
     } 
    }, 

然后在你的控制器可以调用自动生成的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' 
     )} 
    ], 
    ... 
} 

所以现在访问控制器的按钮,你要做的:this.getDetailView().editButton

一般来说,如果一个元素是你访问很多的东西,你应该有一个保存的引用,而不是查询DOM(以避免不必要的性能问题)。使用Ext.getCmp()也会因为执行堆栈而变得更慢(它每次都必须通过ComponentManager才能获得引用)。

相关问题