如何覆盖OpenLayers.Protocol.HTTP的网址?

时间:2013-02-02 17:57:43

标签: openlayers javascript

如何覆盖OpenLayers.Protocol.HTTP的网址?我试过了

  

searchformPanel.protocol.url

并且它有效(使用console.log检查),但最后发送原始URL(在下面的代码中:url:'/ fs /')(参见附图)。

output from firebug

这是代码:

var searchformPanel = new GeoExt.form.FormPanel({
  border: false,
  width: 250,
  protocol: new OpenLayers.Protocol.HTTP({
    url: '/fs/',
    format: new OpenLayers.Format.GeoJSON()
  }),
  items:[{
    xtype: 'combo',
    id: 'idcombo',
    store: new Ext.data.SimpleStore({
      fields:['fsclass','ollayer'],
      data:[["Boreholes","Boreholes"],["All_layers","All layers"]]
    }),
    displayField: 'ollayer',
    valueField: 'fsclass',
    fieldLabel: 'Layer',
    emptyText: 'select a layer',
    submitValue: false,
    selectOnFocus: true,
    mode: 'local',
    typeAhead: true,
    editable: false,
    forceSelection: true,
    triggerAction: 'all'
  },{
    xtype: 'textfield',
    id: 'idtextfield',
    fieldLabel: 'Find features',
    emptyText: 'enter word',
    name: 'comments__like',
    allowBlank: false
  }],
  listeners:{
    actioncomplete: function(form, action){
      searchShowTip(action.response.features);
    }
  },
  buttons:[{
    text: 'search',
    listeners:{
      click: function(){

        var comboLayer = Ext.getCmp('idcombo').getRawValue();
        var keyword = Ext.getCmp('idtextfield').getRawValue();

        var newUrl = '/fs/' + comboLayer + '?format=GeoJSON&comments__ilike=' + keyword + '&queryable=comments';
        console.log('1:' + newUrl);

        //this gets '/fs/' from the searchformPanel
        console.log('2:' + searchformPanel.protocol.url);

        searchformPanel.protocol.url = newUrl;
        console.log('3:' + searchformPanel.protocol.url);

        searchformPanel.search();
      }
    }
  }]

});

请非常欢迎任何支持,谢谢!

2 个答案:

答案 0 :(得分:0)

您的数据格式错误:

data: [["Boreholes","Boreholes"],["All_layers","All layers"]]

应该是这样的:

data: { "Boreholes": "Boreholes", "All_layers": "All layers" }

答案 1 :(得分:0)

最后它起作用!!!!!!!!!诀窍是将协议置于formPanel之外,并将newUrl替换为“protocol.options.url = newUrl;”。在我检查OpenLayers的HTTP.js第180行之前,我不知道这个“选项”,因为我试图使用protocol.read()并且收到指向此行的错误(如here所述)。另外,我正在重新发送formPanel的“评论”和“可查询”(所以我删除了上面的“关键字”),因为它是我自己在这个原始问题中发布的。以下是完成这个技巧的代码,简单而美观:

buttons: [{
    text: 'Search',
    handler: function() {
        comboLayer = Ext.getCmp('idcombo').getValue();
        newUrl = '/fs/' + comboLayer + '?format=GeoJSON';
        protocol.options.url = newUrl;
        formPanel.search();
        }
    }]

另外,我对变量和局部/全局范围如何协同工作感到困惑,我想我想出了这个解决方案,因为我理解在“函数”中编写内容(因为以上所有内容都在函数()中调用处理程序)使变量在声明函数之前和之后被另一个变量读取,不确定它是否清楚我之前解释过,但确定this link更好地解释了它。

希望这可以帮助更多人,特别是像我这样的javascript和openlayers中的新人!!