2012-03-24 93 views
4

我在Sencha Touch 2項目中有一個按鈕。 該按鈕在被按下後被視圖破壞,並在按下另一個按鈕後重建。Sencha Touch 2按鈕鬆動聽衆

但是該按鈕不能再次獲取偵聽器。

監聽器內置在視圖的控制器中。

Ext.application({ 
name: 'App', 
controllers: ['Main','Home'], 
views: ['Main','Home'], 
launch: function() {Ext.Viewport.add({xtype:'mainview'});} 
}); 

控制器

Ext.define('App.controller.Home', {extend: 'Ext.app.Controller', 
config: { 
    refs: {homeView: '#homeview',backBtn: '#btn_test1'}, 
    control: { 
     backBtn: { 
      tap: function(backBtn){ 
       console.log('[Controller][Home] btn monatsrate - - tap'); 
       Ext.Viewport.add({xtype: 'mainview'}); 
       Ext.Viewport.setActiveItem(1); 
      } 
     }, 
     homeView: { 
      deactivate: function (homeView){ 
       console.log('[Controller][Home] autodestroy homeview'); 
       //homeView.destroy(); 
       Ext.Viewport.remove(homeView); 
      } 
     } 
    } 

}, 
}); 

和視圖

Ext.define("App.view.Main", { 
extend:"Ext.Container", 
xtype:"mainview", 
config:{ 
    id:'mainview', 
    items:[ 
     { 
      xtype:'button', 
      id:'btn_test2', 
      text: 'test2' 
     } 
    ] 
}, 

});

任何想法如何讓按鈕讓聽衆回來?

回答

3

這是因爲您的控制器中的「ref」正在使用按鈕的ID來創建參考。相反,爲您的按鈕使用不同的選擇器。例如,你可以給你的按鈕一個「名稱」屬性,並給它一個「testbutton」的值。在整個應用程序的流量那麼你的裁判會像

refs: {homeView: '#homeview',backBtn: 'button[name=testbutton]'}, 

我與創建的按鈕和列表項同樣的問題掙扎/摧毀了許多倍。從那以後,我讀了幾次,一般來說,Sencha Touch團隊建議不要使用id作爲選擇器,除非您有特定的理由。上面的「名稱」方法對我來說效果很好。你也可以使用很多其他的CSS樣式選擇器(你必須單獨閱讀)。

正如前面的評論中提到的,我會接受一些答案,以增加將來回答您的問題的可能性。我只是回答了這個問題,因爲我在這個問題上對我的頭撞了4個小時。

0

我相信你的問題正是id參數。如果你添加了任何id,你應該確保它是唯一的,因此添加一個id到你的自定義視圖的配置將導致無法創建它的更多然後一個實例!我可能不是100%的權利(可能在一個容器內,但我認爲它會導致問題),但爲什麼你會想要一個id很多?此外,你可以簡單地通過的xtype引用您的看法:

refs: {homeView: 'homeview',backBtn: 'btn_test1'}, 

問候,

+0

即使我認爲這是id問題!此代碼執行Ext.Viewport.add({xtype:'mainview'});確實使用相同的ID創建更多和更多的視圖。我相信這位經理人總是在第一個工作。 – igrek 2012-05-15 14:15:22

1

煎茶的例子推薦使用上的按鍵動作的配置,如「取消」,「GOHOME」,「createPost」等。其有點有道理。
所有的裁判都是這樣形式的:myContainer按鈕[action = myAction]