2014-01-18 59 views
0

我有一個如下所示的結構。如何從ExtJS中同一級別的按鈕引用容器

我可以引用(從按鈕處理程序)up.down我的組件,但我想知道是否有更正確的方法來做到這一點。

Ext.application({ 
     name: 'MyApp', 
     launch: function() { 
      Ext.create('Ext.container.Viewport', { 
       items: [ 
        { 
         tpl: 'Name: {first} {last}', 
         data: { 
          first: 'Peter', 
          last: 'Kellner' 
         }, 
         padding: 20, 
         width: 200, 
         height: 200, 
         style: { 
          border: '2px solid red' 
         }, 
         resizable: true, 
         itemId: 'myComponentItemId', 
         listener: { 
          resize: { 
           fn: function(component, width, height) { 
            console.log("w/h:" + width + " " + height); 
           } 
          } 
         } 
        },{ 
         xtype: 'button', 
         text: "Disable", 
         handler: function() { 
          debugger; 
          this.up().down('#myComponentItemId').disable(); 
         } 
        } 
       ] 
      }); 
     } 
    }); 
+0

我認爲這是一個好方法。但是,我通常會指定我要去哪裏以防萬一我更深地嵌套按鈕等。 'btn.up('form')'如果你需要從控制器中找到一個組件,有時我會使用'Ext.ComponentQuery.query('#itemId')[0]' – weeksdev

+0

我試圖避免componentQuery它是應用程序的全部範圍。似乎應該有一些簡單的方法來獲得我沒有看到的姐妹節點。謝謝。 –

回答

2

對於您要做的事情,使用.up.down是正確的。你可以使用類似:

.up('form').down('button#login') 

是你在你的代碼中使用,而另一方面有什麼不正確:this.up().down('#myComponentItemId')。您必須傳遞一個組件選擇器作爲參數.up()

.up.down的替代品是.nextSibling.previousSibling。類似但更一般的還有.nextNode.previousNode

+2

並非完全如此。沒有參數的'up'只會得到容器。 –

+0

埃文,你是每一個人!我給了sencha論壇一些休息。但是,當你在這裏時,有什麼更好的方法來獲得與我按下的按鈕處於同一級別的容器? –

+1

儘管將arg添加到up()是可選的,但最好的做法是這樣做。如果將組件移動到/(重構),代碼破壞的可能性會降低。 – player