9

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

我怎样才能实现它?

4

2 回答 2

10

实现这一点的最简单方法是用您定义的方法在 Coupon 模型上覆盖 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 将用于同步到服务器的每个操作(获取、保存、..)。

如果您需要根据您正在执行的操作更好地控制 URL 的生成,您将需要为您的模型覆盖 Backbone 的Sync方法。

于 2012-09-21T19:48:18.117 回答
0

可以通过覆盖模型中的 fetch 方法来使用一些自定义数据来完成。使用CoffeeScript可能看起来像这样:

class AffiliatesApp.Coupon extends Backbone.Model
  fetch: ->
    super(data: { type: @get('type') })

请注意,此示例将忽略传递给 的任何属性coupon.fetch(),但是可以轻松地针对任何覆盖逻辑对其进行调整。

于 2015-02-26T11:22:16.250 回答