我想从参数中获取特定网址的模型: url:server / somecontroller / id /?type = gift
简单的工作方式是:
collection.fetch({ data: { type: 'gift'} });
但我想在模型中设置它:
...
if(id){
App.coupon = new AffiliatesApp.Coupon({id: id});
} else {
App.coupon = new AffiliatesApp.Coupon({id: 'somecontroller'}, {type: 'gift'});
}
App.coupon.fetch();
我怎样才能实现它?
答案 0 :(得分:8)
实现此目的的最简单方法是使用您定义的方法覆盖优惠券模型上的Backbone的url方法。例如,你可以这样做:
Affiliates.Coupon = Backbone.Model.extend({
urlRoot : "server/somecontroller/",
url : function(){
var url = this.urlRoot + this.id;
if(this.get("type")){
url = url + "/?type=" + this.get("type");
}
return url;
}
});
此解决方案易于实现,但有一个缺点:生成的URL将用于与服务器同步的每个操作(fetch,save,..)。
如果您需要根据您正在执行的操作更好地控制URL的生成,则需要为您的模型覆盖Backbone的Sync方法。
答案 1 :(得分:0)
可以通过覆盖模型中的fetch方法来使用一些自定义数据来完成。使用CoffeeScript它可能如下所示:
class AffiliatesApp.Coupon extends Backbone.Model
fetch: ->
super(data: { type: @get('type') })
请注意,此示例将忽略传递给coupon.fetch()
的所有属性,但可以轻松调整任何覆盖逻辑。