我有一个关于将字符串从一个Ext.formPanel文本字段传递到代码的另一部分的问题。问题是我在formPanel中有两个“textfield”,我希望我在那里输入的单词作为代码中“url”的一部分。也许你可能会问,为什么这个人想要那个?这是因为我正在使用的“url”有一个PHP脚本,可以生成存储在postgis db表中的功能,如GeoJSON。
这段代码:
[CODE]
// define the data source
var protocol = new OpenLayers.Protocol.HTTP({
url: "http://localhost/postgis_geojson.php?geotable=boreholes_point_wgs84&geomfield=geom¶meters=" + "column" + ilike '%"string"%',
format: new OpenLayers.Format.GeoJSON({
ignoreExtraDims: true,
'internalProjection': new OpenLayers.Projection("EPSG:900913"),
'externalProjection': new OpenLayers.Projection("EPSG:4326")
})
});
formPanel = new GeoExt.form.FormPanel({
title: "Place Name Search",
height: 150,
region: "north",
protocol: protocol,
items: [{
xtype: "textfield",
id: "column",
emptyText: "Choose table column",
fieldLabel: "Choose table column",
width: 200,
allowBlank: false
}, {
xtype: "textfield",
id: "string",
emptyText: "Search inside table",
fieldLabel: "Enter a word to search",
width: 200,
allowBlank: false
}],
listeners: {
actioncomplete: function(form, action) {
features = action.response.features;
store.loadData(features);
vm=map.getLayersByName("Results");
if(vm.length===0){
vecLayer = new OpenLayers.Layer.Vector("Results");
map.addLayer(vecLayer);
store.bind(vecLayer);
select.bind(vecLayer);
}
}
},
buttons: [{text: 'search',
handler: function(){
formPanel.search();
}
}],
keys: [{ key: [Ext.EventObject.ENTER],
handler: function() {
formPanel.search();
}
}]
});
[/CODE]
这些是我已经测试过的案例:
http://localhost/postgis_geojson.php?geotable=boreholes_point_wgs84&geomfield=geom
:这会生成整个表格“boreholes_point_wgs84”作为GeoJSON。http://localhost/postgis_geojson.php?geotable=boreholes_point_wgs84&geomfield=geom¶meters=station ilike '%llena%'
:这只生成一个功能,即“站”列中包含“llena”的功能。因此,通过这种方式,我可以通过搜索表单找到该功能。我在想的是,如果我可以传递我在“textfield”中输入的这两个字符串,并修改“url”,就像它可以捕获这两个单词并形成一样,例如,我在上面提到的第二个案例。我正在玩这个:
url:http://localhost/postgis_geojson.php?geotable=boreholes_point_wgs84&geomfield=geom¶meters=" + "column" + ilike '%"string"%'
,所以使用我在每个xtype下面指定的“id”,但它不起作用。
我感谢您对此的任何支持,在此先感谢,
致以最诚挚的问候,
格里
答案 0 :(得分:0)
正确的方法是提交简单的表单。文本输入值将以表格发布的形式发送到服务器。服务器端应该解析提交的值并执行必要的操作。这与使用纯HTML和任何服务器端框架没有任何不同。
或者,您可以强制使用HTTP GET方法而不是POST来提交表单,然后您的输入值将成为您网址的一部分。在ExtJS中,您使用'method'配置。请参阅API文档:http://docs.sencha.com/ext-js/4-1/#!/api/Ext.form.Basic-cfg-method
编辑:如果您对实际“提交”表单毫无兴趣,可以获取以下字段值:form.findField('myField')。value
答案 1 :(得分:0)
我很确定this solution将有助于理解如何解决这个问题,我解决了自己。