4

我有一些全局参数,每次我在集合上调用 fetch 时都想发送这些参数......我的问题是我不想在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();
    }
});

我只想提供一两个参数和一个成功函数,如下所示:

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

...并让 Collection 看起来像:

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

这是一个使用一种方法的工作 jsFiddle:http: //jsfiddle.net/LEuGq/1/

基本上,您将集合的对象defaultParamsparams属性都配置为集合的属性,用于在fetch()调用时动态计算正确的 URL。这种方式可能更符合骨干网,而不是更改 APIfetch()以接受参数,而这并不是设计用来做的。

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

Backboneajax默认使用 jQuery 的调用,因此您可以使用各种方法将所需的任何内容设置为默认值。有关一些示例,请参见此问题:jQuery 的 ajaxSetup - 我只想为 GET 请求添加默认数据

于 2012-12-18T23:10:58.277 回答