2

アプリケーションに、指定されたクエリ文字列に基づいてデータを返すエンドポイントがあります。クエリ文字列には、たとえば/api/entities/related?filter1=val1&filter1=val2&filter2=val3type の 2 つのフィルターを識別するために、重複するキーを含めることができます (多くの場合、そうする必要があります) filter1。Flask はこれを適切に処理します。たとえば、 を実行するrequest.args.to_dictと、 が得られ{'filter1': ['val1', 'val2'], 'filter2': 'val3'}ます。

私の質問は、エンドポイントからコレクションをフェッチするときにバックボーンで同じことを達成する方法です。現在、私は持っているかもしれません

this.fetch({data: {'filter1': 'val1', 'filter1': 'val2', 'filter2': 'val3'}});

重複したキーは JavaScript オブジェクトで互いにオーバーライドされるため、私のfilter1値はval2. ただし、行うときは

this.fetch({data: {'filter1': ['val1', 'val2'], 'filter2': 'val3'}});

URL は最終的にになります/api/entities/related?filter1%5B%5D=val1&filter1%5B%5D=val2。これは、少なくとも 2 つの同一のキーを使用しますが、明らかに機能しません。

これはエンコーディングの問題ですか、それとも別の方法でアプローチする必要がありますか?

4

2 に答える 2

1

を値として使用して、重複するキーを持つクエリ文字列を渡すことができArrayます。

this.fetch({ data: $.param({ filter1: ['value1','value2']}) });

または、クエリ文字列パラメーターを使用して、このように URL をいつでも設定できます。

var MyModel = Backbone.Model.extend({
  "url": function() {
      return '/' + encodeURI('?filter1=' + val1 + '&filter1=' + val2);
  }
});

パラメータを常に変更する必要がある場合は、次のようにして直接操作できます。

this.model.destroy({
    url: '/' + encodeURI('?filter1=' + val1 + '&filter1=' + val2)              
});

複数の具象パラメータ (値は変化するがキーは静的であることを意味する) がフェッチごとに変化する場合 (つまり、検索)、Gistでページングの実装をチェックアウトできます。

お役に立てれば。

于 2013-01-31T17:35:40.593 に答える
0

皆様のご意見をお寄せいただきありがとうございます。

どうやら、渡すデータはオブジェクトである必要はありません。私の場合、文字列 ( 'filter1=val1&filter2=val2') を fetch() に渡すのが最も簡単な方法であり、完全に機能することがわかりました。

于 2013-02-01T10:26:34.100 に答える