0

OpenLayers.Protocol.HTTP の URL を上書きするにはどうすればよいですか? 私は試した

searchformPanel.protocol.url

動作しますが (console.log で確認)、最後に元の URL が送信されます (以下のコード: url: '/fs/') (添付の図を参照)。

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();
      }
    }
  }]

});

これについてのサポートは大歓迎です、ありがとう!

4

2 に答える 2

0

最後にそれは働いた!!!!!!!!! トリックは、formPanel の外でプロトコルを取得し、そこで newUrl を「protocol.options.url = newUrl;」に置き換えることでした。この「オプション」については、OpenLayers の HTTP.js の 180 行目を確認するまで知りませんでした。なぜなら、protocol.read() を使用しようとしたところ、この行を指すエラーを受け取ったからです (説明はこちら)。また、この元の質問に自分で投稿したため、formPanel の「コメント」と「クエリ可能」を再送信していました (そのため、上記の「キーワード」を削除しました)。シンプルで美しいトリックを実行したコードは次のとおりです。

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

また、変数とローカル/グローバルスコープがどのように連携するかについて混乱していました.「関数」内に書くことを理解していたので、この解決策を思いついたと思います(上記のすべてがハンドラで呼び出される function() 内にあるため)関数が宣言される前後に、変数が別の変数によって読み取られるようにします。前に説明したことが明確かどうかはわかりませんが、このリンクがそれをよりよく説明していることを確認してください。

これがより多くの人々、特に私のような javascript や openlayer の初心者に役立つことを願っています!!

于 2013-02-14T15:53:41.063 に答える
0

データの形式が正しくありません:

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

次のようにする必要があります。

data: { "Boreholes": "Boreholes", "All_layers": "All layers" }
于 2013-02-02T18:01:11.323 に答える