2012-09-20 8 views
8

をフェッチしてモデルにURLパラメータを設定&使用しますBACKBONE.JSは、私はパラメータで特定のURLからモデルを取得したいと思い、それは

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(); 

どのように私はそれを達成することができますか?

答えて

8

これを達成する最も簡単な方法は、バックボーンの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をオーバーライドする必要があります。

0

モデル内のfetchメソッドをオーバーライドして、カスタムデータを使用することによって行うことができます。 CoffeeScriptを使用して、それは次のようになります。この例では、coupon.fetch()に渡された任意の属性を無視すること

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

注意、しかし、それは簡単に任意のオーバーライドロジックに合わせて調整することができます。

関連する問題