Backbone.js在模型和模型中设置URL参数。用它来获取

时间:2012-09-20 22:22:04

标签: backbone.js marionette

我想从参数中获取特定网址的模型: 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();

我怎样才能实现它?

2 个答案:

答案 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()的所有属性,但可以轻松调整任何覆盖逻辑。