将“textfield”中的字符串传递给代码中的另一部分

时间:2012-10-01 17:55:15

标签: php extjs openlayers postgis

我有一个关于将字符串从一个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&parameters=" + "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]

这些是我已经测试过的案例:

  1. url:http://localhost/postgis_geojson.php?geotable=boreholes_point_wgs84&geomfield=geom:这会生成整个表格“boreholes_point_wgs84”作为GeoJSON。
  2. url:http://localhost/postgis_geojson.php?geotable=boreholes_point_wgs84&geomfield=geom&parameters=station ilike '%llena%':这只生成一个功能,即“站”列中包含“llena”的功能。因此,通过这种方式,我可以通过搜索表单找到该功能。
  3. 我在想的是,如果我可以传递我在“textfield”中输入的这两个字符串,并修改“url”,就像它可以捕获这两个单词并形成一样,例如,我在上面提到的第二个案例。我正在玩这个:

    url:http://localhost/postgis_geojson.php?geotable=boreholes_point_wgs84&geomfield=geom&parameters=" + "column" + ilike '%"string"%',所以使用我在每个xtype下面指定的“id”,但它不起作用。

    我感谢您对此的任何支持,在此先感谢,

    致以最诚挚的问候,

    格里

2 个答案:

答案 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将有助于理解如何解决这个问题,我解决了自己。