每次调用集合上的fetch时,我都会发送一些全局参数...我的问题是我不想每次获取时都声明data: { ... }
。
有没有办法可以在Collection本身内部提供默认参数,可以添加更多或覆盖一些?
例如:
而不是每次都这样做:
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;
});
答案 0 :(得分:3)
这是一个有效的jsFiddle,有一种方法:http://jsfiddle.net/LEuGq/1/
基本上,您将defaultParams
和params
的对象配置为集合的属性,用于在调用fetch()
时动态计算正确的URL。这种方式可能更多地与骨干一致,而不是将fetch()
的API更改为接受参数,而这并不是设计用的。
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());
答案 1 :(得分:1)
Backbone默认使用jQuery的ajax
调用,因此您可以使用各种方法设置您需要的任何默认设置。请参阅此问题以获取一些示例:jQuery's ajaxSetup - I would like to add default data for GET requests only