如何覆盖OpenLayers.Protocol.HTTP的网址?我试过了
searchformPanel.protocol.url
并且它有效(使用console.log检查),但最后发送原始URL(在下面的代码中:url:'/ fs /')(参见附图)。
这是代码:
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();
}
}
}]
});
请非常欢迎任何支持,谢谢!
答案 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中的新人!!