2

我想通过参考从 DistrictMap 控制器的 mapPanel 工具栏中选择 Draw Polygon 按钮,为此我在 DistrictMap 控制器中使用下面的选择器!但它不起作用,我在控制台中看到未定义!

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
不能选择工具栏项目?虽然如果我#polygonButton在选择器中只使用 id !

4

2 回答 2

2

在上面的问题中,因为没有加载 DistrictPanel 视图,所以选择器无法在 mapPanel 工具栏中选择多边形按钮来解决这个问题,你应该使用控制器onLaunch函数而不是init函数。所以固定代码是:

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());
}
于 2013-03-10T18:58:13.243 回答
1

您的选择器意味着FM.view.MapPanelxtype 为mapPanel. 真的是这样吗?

也不要忘记控制器引用和控制选择器只是组件选择器。您可以在浏览器中打开控制台并使用Ext.ComponentQuery.query().

于 2013-03-10T02:03:05.780 回答