带有 OpenLayers 代码的 ExtJS4 工具栏

发布于 2024-11-26 12:50:49 字数 968 浏览 3 评论 0原文

我们在应用程序中使用带有 ExtJS3.2 的 Mapfish 工具栏。现在我们正在尝试将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. 还有其他方法可以使用 ExtJS4 处理 OpenLayers 吗?

We are using Mapfish toolbar with ExtJS3.2 in our application. Now we are trying to upgrade ExtJS3.2 to ExtJS4. But mapfish is not working with ExtJS4. So, we are using ExtJS4 toolbar, but openlayers code which is written for button in toolbar is not executing.

ExtJS4 code is:

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);

Here if we click on the zoom in button control is going into OpenLayers.Control.ZoomBox but the draw method is not executing. My questions are:

  1. Is there any thing wrong in the code?
  2. Is there any other way to approach OpenLayers with ExtJS4?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

故事未完 2024-12-03 12:50:49

我也在使用 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 是否或如何与 Ext 4 一起使用

至于你问题的第2点,很抱歉,我无法回答这个问题,因为我没有使用Ext 4的经验。

I am using MapFish too, with Ext 3.4.

First of all you have a fucntion() instead of function() :)

Then, may be I haven't understand what you want to do, but I think -IMAO- that this is not a good way to use the ZoomBox control...
You should add the ZoomBox control to the map while you create it and give the control an id, then use a listener for the toggle event like this:

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

This way when you press the button you enable the control, and when you press it again you disable it.
Keep in mind that the ZoomBox control, once active, can also be always available by holding shift

Or you could also use GeoExt, which is really easy, like this

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

But I don't know if or how GeoExt works with Ext 4

As for the point 2 of your question, I am sorry but I cannot answer that, because I have no experience with Ext 4.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文