2016-05-07 8 views
1

ウェブサイトのモデルコードを見ていて、プロトタイプに関する質問がありました。私はそれがJavascriptの継承に役立つことを理解しています。この例ではバックボーンのモデルプロトタイプをフェッチしてバックボーンを取得する

...

define([], function() { 

    "use strict"; 

    /** 
    * Data Model 
    * 
    * @type {Backbone.Model} 
    */ 
    var DataModel = Backbone.Model.extend({ 

     defaults : { 

     }, 

     urlRoot : '/api/..../../..', 

     fetch : function() { 
      Backbone.Model.prototype.fetch.apply(this, arguments); 
     } 
    }); 

    return Datamodel; 
}); 

は、なぜ我々は代わりに私がスーパー大型の混乱しているModel.fetch();

昔ながらのBackbone.Model.prototype.fetch.apply(this, arguments);を行う必要があります。何かを取得するためにプロトタイプを使用するのはなぜですか?私はここでユースケースを理解できません。

助けてください。

+0

署名を控えてください。それらがノイズであり、質問に何も追加しないことを除けば、あなたの投稿はあなたのユーザカードで署名されています。 – Daedalus

+0

は心に留めておきます@Daedalus – TechnoCorner

答えて

4

これは、実際のfetchメソッドを呼び出す前に、いくつかのプリプロセスを行うために行われます。つまり、モデルfetchを独自のロジックでオーバーライドし、必要に応じて最終的に元のfetchメソッドを呼び出します。例えば

​​

これはmodel.fetch()を呼び出していますすべてのビューの中で進めるべきフェッチ方法を決定するためのコードを有するよりも優れたソリューションです。

もちろん、そこにカスタムロジックがなくても、あなたの例のように、これはかなり不要です。

+3

'if'ブランチの' return'は、コードがそのインターフェースに依存する可能性があるので、約束を返すべきであることに注意してください。 –

+0

@ try-catch-finally最終的にあなたは精巧にできますか?なぜあなたは約束オブジェクトを返す必要がありますか?ローカル変数を使用している場合は?混乱したようなもの。コードが本当に役に立ちます! – TechnoCorner

+0

@TechnoCorner他の開発者があなたのモデルを使用していると想像してください...彼はそれがフェッチであると仮定します。通常のモデルのようにjqxhrを返します。したがって、それをオーバーライドしてプリミティブを返すと、コードが破損します。答えの更新を参照してください。 –

関連する問題