2013-03-09 32 views
2

我想從DistrictPanel控制器中的mapPanel工具欄中選擇繪製多邊形按鈕,通過refs爲了這個目的,我在下面的選擇器中使用了DistrictMap控制器!但它不工作,我看到在控制檯中未定義!在extjs4 mvc控制器中捕獲工具欄項目事件

Ext.define('FM.controller.DistrictMap',{ 
extend: 'Ext.app.Controller', 
refs:[ 
    { 
     selector: 'mapPanel toolbar > #polygonButton', 
     ref: 'polygon' 
    } 
], 
init: function(){ 
    this.control({ 
     'mapPanel toolbar > button#polygonButton':{ 
      click: this.drawPolygon() 
     } 
    }); 
}, 
drawPolygon: function(){ 
    console.log(this.getPolygon()); 
} 

我用下面的代碼添加工具欄到mapPanel。

Ext.define('FM.view.DistrictPanel',{ 
extend: 'Ext.panel.Panel', 
initComponent: function(){ 
    var map = Ext.create('FM.view.MapPanel',{}); 
    map.setPolygonControl(); 
    map.setModifyControl(); 
    map.setSelectControl(); 
    map.addDocked({ 
      xtype: 'toolbar', 
      dock: 'top', 
      items:[ 
       { 
        xtype: 'button', 
        text: 'Draw Polygon', 
        enableToggle: true, 
        toggleGroup: "draw controls", 
        id: 'polygonButton' 
       } 
      ]}); 

上面的選擇器無法選擇工具欄項目! 我測試'mapPanel toolbar #polygonButton'選擇器,但它不工作! #polygonButton
爲什麼選擇器無法選擇工具欄項目?雖然如果我在選擇器中只使用ID #polygonButton

回答

2

在上面的問題,因爲districtPanel視圖不加載,以便選擇可以mapPanel工具欄上的修復不選擇polygonButton這個問題你應該使用,而不是init功能控制器onLaunch功能。所以固定的代碼是:

Ext.define('FM.controller.DistrictMap',{ 
extend: 'Ext.app.Controller', 
refs:[ 
    { 
     selector: 'districtPanel mapPanel toolbar #polygonButton', 
     ref: 'polygon' 
    } 
], 
onLaunch: function(){ 
    this.control({ 
     'districtPanel mapPanel toolbar #polygonButton':{ 
      click: this.drawPolygon 
     } 
}); 
}, 
drawPolygon: function(){ 
    console.log(this.getPolygon()); 
} 
1

您的選擇器意味着FM.view.MapPanel的xtype爲mapPanel。這是真的嗎?

另外不要忘記,控制器參考和控制選擇器只是組件選擇器。您可以在瀏覽器中打開控制檯,並嘗試使用Ext.ComponentQuery.query()的不同選擇器。

+0

我加''districtPanel mapPanel#polygonButton''到控制器onLaunch功能,它可以得到按鈕,但我不知道當我運行按鈕時應用點擊事件!因爲我不點擊按鈕! – taher 2013-03-10 12:37:09

+0

@taher不確定你的意思,但我認爲你需要更徹底地閱讀'Ext.ComponentQuery'文檔。控制器並不神奇,它們依靠組件選擇器來工作。當你獲得組件選擇器的時候,一切都會正常工作。 – 2013-03-12 06:06:31