Панель инструментов ExtJS4 с кодом OpenLayers - PullRequest
0 голосов
/ 27 июля 2011

Мы используем панель инструментов Mapfish с ExtJS3.2 в нашем приложении. Сейчас мы пытаемся обновить ExtJS3.2 до ExtJS4. Но mapfish не работает с ExtJS4. Итак, мы используем панель инструментов ExtJS4, но код openlayers, который написан для кнопки на панели инструментов, не выполняется.

Код ExtJS4:

var extoolbar = Ext.create('Ext.toolbar.Toolbar',{
    border : true,
    width : 100,
    height : 40,
    layout : hbox
});

var btn1 = {
    xtype : 'button',
    enableToggle : true,
    tooltip : "Zoom In",
    id : 'zoominbtn',
    listeners : {
        'click' : fucntion(){
            new OpenLayers.Control.ZoomBox({
                alwaysZoom : true,
                draw : function(){
                    this.handler = new OpenLayers.Handler.Box(
                        this, {done: this.zoomBox}, {keyMask: this.keyMask});
                }
            });
        }
    }
};
extoolbar.add(btn1);

Здесь, если мы нажимаем на кнопку увеличения, управление переходит в OpenLayers.Control.ZoomBox, но метод draw не выполняется. Мои вопросы:

  1. Что-то не так в коде?
  2. Есть ли другой способ приблизиться к OpenLayers с ExtJS4?

1 Ответ

1 голос
/ 04 августа 2011

Я тоже использую MapFish с Ext 3.4.

Прежде всего у вас есть fucntion() вместо function():)

Тогда, может быть, я не понял, что вы хотите сделать, но я думаю -IMAO-, что это не очень хороший способ использовать элемент управления ZoomBox ... Вы должны добавить элемент управления ZoomBox на карту во время его создания и присвоить элементу управления идентификатор, а затем использовать прослушиватель для события переключения, например:

listeners: {
    'toggle': function(button, pressed) {
        var ctrl = map.getControl('yourid');
        if(pressed){
            // Activate the control
            ctrl.activate();
        } else {
            // Deactivate the control
            ctrl.deactivate();
        }
    }
}

Таким образом, когда вы нажимаете кнопку, вы активируете элемент управления, а когда вы нажимаете его снова, вы отключаете его. Имейте в виду, что элемент управления ZoomBox, когда он активен, также всегда может быть доступен, удерживая shift

Или вы также можете использовать GeoExt, который действительно прост, как этот

GeoExt.Action({
    map: map,
    text: "Zoom Box",
    control: new OpenLayers.Control.ZoomBox()
});

Но я не знаю, работает ли GeoExt с Ext 4

.

Что касается пункта 2 вашего вопроса, извините, но я не могу ответить на него, потому что у меня нет опыта работы с Ext 4.

...