4

data: { ... }コレクションでフェッチを呼び出すたびに送信したいグローバルパラメータがいくつかあります...私の問題は、フェッチするたびに宣言したくないということです。

コレクション自体の内部にデフォルトのパラメーターを提供して、さらに追加したり、一部をオーバーライドしたりできる方法はありますか?

例えば:

毎回これを行う代わりに:

this.articlesCollection.fetch({
    dataType: 'jsonp',
    data: {
        deviceType: GlobalVars.deviceType,
        memberId: GlobalVars.memberId,
        authToken: GlobalVars.authToken,
        targetObjectId: userId,
        limit: 50,
        excludeArticleBodies: true,
        excludeViewedItems: false
    },
    success: function() {
        _this.render();
    }
});

次のように、1 つまたは 2 つのパラメーターと成功関数を提供したいと思います。

this.articlesCollection.fetch({
    data: {
        targetObjectId: userId
    },
    success: function() {
        _this.render();
    }
});

...そして、コレクションを次のようにします。

define([
  'underscore',
  'backbone',
  'global',
  'utilities',
  'models/article/ArticleModel'
], function(_, Backbone, GlobalVars, Utils, ArticleModel){

  var ArticlesCollection = Backbone.Collection.extend({

      model: ArticleModel,

      initialize : function(view) {
          this.view = view;
      },

      dataType: 'jsonp',
      data: {
          deviceType: GlobalVars.deviceType,
          memberId: GlobalVars.memberId,
          authToken: GlobalVars.authToken,
          limit: 50,
          excludeArticleBodies: true,
          excludeViewedItems: false
       },

      url : function() {
        return GlobalVars.baseAPIUrl + '/API/GetArticles';
      },

      parse : function(data) {  
        return data.Articles;
      }     

  });

  return ArticlesCollection;

});
4

2 に答える 2

3

これが1つのアプローチで機能するjsFiddleです:http: //jsfiddle.net/LEuGq/1/

基本的に、コレクションのオブジェクトdefaultParamsとプロパティの両方を構成します。これらは、が呼び出されたparamsときに正しいURLを動的に計算するために使用されます。fetch()この方法は、パラメータを受け入れるようにAPIを変更するよりも、バックボーンと整合している可能性がありfetch()ますが、これは設計されていません。

var ParamCollection = Backbone.Collection.extend({

    defaultParams: {deviceType: 'raceCar', limit: 42},
    params: {},
    url: function() {
      return "/paramcollection?" + $.param(_.defaults(this.params, this.defaultParams));
    }
});
var paramCollection = new ParamCollection();
paramCollection.params.excludeArticleBodies = true;
paramCollection.params.limit = 52;
$("#debug").append(paramCollection.url());
于 2012-12-18T23:21:05.993 に答える
1

Backbone はajaxデフォルトで jQuery の呼び出しを使用するため、さまざまな方法を使用して必要なものをデフォルトとして設定できます。いくつかの例については、この質問を参照してください: jQuery の ajaxSetup - GET 要求のみにデフォルト データを追加したい

于 2012-12-18T23:10:58.277 に答える