2013-02-13 71 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才能獲得引用)。

相關問題