0

バックボーンを使用して、かなり基本的なページ付けとフィルタリングのサポートを実装しようとしています

これまでのところ、Collection.url()関数には次のようなものがあります。

url: function() {
  var url = 'http://localhost:9000/wines';
  var query = '';

  if (this.filter)  query += '&filter=' + this.filter;
  if (this.order)   query += '&order='  + this.order;
  if (this.page)    query += '&page='   + this.page.toString();
  if (this.len)     query += '&len='    + this.len.toString();

  if (query) url += '?' + query.substring(1);

  return url;
},

あなたはアイデアを得る

問題は、アイテムを作成(POST)または更新(PUT)しようとすると、クエリ文字列もブラウザに送信されることです...

url関数で、発行している操作を検出し、データをフェッチ(GET)するときにのみクエリ文字列パラメーターを追加する方法はありますか?

または別のアプローチをお勧めしますか?

4

1 に答える 1

0

私はそれを行う次の方法を見つけました

次のように、fetch メソッドをオーバーライドするだけです。

initialize: function(options) {

  this._fetch = this.fetch;

  this.fetch = function() {
    options = {};
    options.url = 'http://localhost:9000/wines'

    data = {};
    if (this.filter) data.filter = this.filter;
    if (this.order) data.order = this.order;
    if (this.page) data.page = this.page;
    if (this.len) data.len = this.len;

    options.data = data;

    return this._fetch(options);
  }
},

_fetch 変数の保存を回避する方法が見つかりませんでした。

Backbone.Collection.fetch(オプション) を返します。Backbone.Collection.prototype.fetch(オプション);

Wines.fetch(オプション)を返します。Wines.prototype.fetch(options); を返します。

しかし、どれも機能していないようです...

- 編集

バックボーンページで見つけました:

Backbone.Collection.prototype.fetch.call(this, options); を返します。

于 2012-08-10T05:23:42.837 に答える