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

これを実現する最も簡単な方法は、クーポンモデルで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

これは、モデルのフェッチメソッドをオーバーライドしてカスタムデータを使用することで実行できます。CoffeeScriptを使用すると、次のようになります。

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

この例では、に渡された属性はすべて無視coupon.fetch()されますが、オーバーライドロジックに合わせて簡単に調整できることに注意してください。

于 2015-02-26T11:22:16.250 に答える