2013-08-09 10 views
8

私はこの世界で初めてです。バックボーンとマリオネットの概念のいくつかを理解する必要があります。ここでは、私が学んでいる概念のいくつかを説明しようとしています。それらにいくつかのフィードバックを持つことは素晴らしいことです。バックボーンとマリオネットの理解ライフサイクルの理解

render関数はテンプレートをレンダリングするロジックを定義します。終了すると、onRenderコールバックが呼び出されます。ここでは、レンダリングされたビューがDOMに接続されていないと仮定します。それは添付されたテンプレートを含むtagName(デフォルトはdiv)で構成されています。そのタグを明示的にDOMに挿入するには、どこかに追加する必要があります。私が間違っている?

一般に、私は以下を行います。

var view = new MyView(); 
view.render(); 
$("container").append(view.$el);​ 

エリアの概念でバックボーンを拡張します。 showメソッドは、特定のビューを表示する領域で呼び出すことができます。この場合

var view = new MyView(); 
region.show(view); 

show方法は、独自の、ビューの内容は、DOMに置かれるとき、最終的に、onShowは、そのビューに呼び出された上render関数を呼び出すになります。大丈夫ですか?

マリオネットからは、onDomRefreshという別のコールバックもあります。私の実験から、私はこのメソッドがonShowの前に呼び出されていることに気付きました。だから、私の想定は、ビューがDOMにまだ添付されていないということです。しかし、医者は次のように述べています。

ビューがレンダリングされた後にトリガされ、DOM にMarionette.Regionを介して表示され、再レンダリングされました。

いくつかのヒントを教えてください。

ありがとうございます。

答えて

3

価値があるのは、私が言ったことは多かれ少なかれ正しいと信じています。

return function(view){ 
    view.listenTo(view, "show", function(){ 
    handleShow(view); 
    }); 

    view.listenTo(view, "render", function(){ 
    handleRender(view); 
    }); 
}; 

だから本当に、すべてのことが起こってはの添付ファイルです:MonitorDOMRefreshビットがすべてのビューにして混合し、このAPIを追加している - ソース(「DomRefresh」を探して利用できるhere)を見てみると

2つのイベントビューにリスナー、およびコールバック(handleShow/handleRender)はブール_isShown又は_isRenderedを設定してtriggerDomRefreshを呼び出し、言うた:

function triggerDOMRefresh(view){ 
    if (view._isShown && view._isRendered){ 
    if (_.isFunction(view.triggerMethod)){ 
     view.triggerMethod("dom:refresh"); 
    } 
    } 
} 

だから、そこに行く... onDomRefreshは、ビューがレンダリング、表示、再レンダリングされるたびに呼び出されます。

希望に役立ちます!