2011-07-27 150 views
0

我們在我們的應用程序中使用帶有ExtJS3.2的Mapfish工具條。現在我們正在嘗試將ExtJS3.2升級到ExtJS4。但是mapfish並不適用於ExtJS4。因此,我們使用ExtJS4工具欄,但是爲工具欄中的按鈕編寫的openlayers代碼未執行。帶OpenLayers的ExtJS4工具條代碼

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.ZoomBoxdraw方法不執行。我的問題是:

  1. 是否有任何錯誤的代碼?
  2. 是否有任何其他方式與ExtJS4接近OpenLayers?
+0

沒有經驗這也可能會有所幫助:HTTP :?//www.sencha.com/forum/showthread.php 132276-的OpenLayers,機智h-ExtJS-4&p = 634056 –

回答

1

我也使用MapFish和Ext 3.4。

,首先你有一個的fucntion()代替function() :)

話,可能我一直搞不明白你想做的事,但我認爲-IMAO-,這是不使用的好辦法在ZoomBox控制... 你應該在你創建它的ZoomBox控件添加到地圖,並給予控制的ID,然後使用偵聽器觸發事件​​是這樣的:

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如何與內線4

至於你的問題的第2點,我很抱歉,我不能回答這個問題,因爲我有一個分機4.

+0

我們將Mapfish中的一些組件升級爲ExtJS4.Its工作。感謝您的回覆。 – Unknown

+1

不客氣!祝你好運,所有的GIS編程,都讓我瘋狂! :d – mokagio