8

私はこの世界に不慣れで、バックボーンとマリオネットの概念のいくつかを理解する必要があります。ここでは、私が学んでいる概念のいくつかを説明しようとしています。それらについてフィードバックをいただければ幸いです。

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

一般的に、私は次のことを行います。

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

Marionette は、領域の概念で Backbone を拡張します。このshowメソッドをリージョンで呼び出して、特定のビューを表示できます。

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

この場合、showメソッドはrenderそれ自体で関数を呼び出し、最後に、ビューのコンテンツが DOM に配置されるときに、onShowそのビューで が呼び出されます。大丈夫ですか?

Marionette doc から、 と呼ばれる別のコールバックもありますonDomRefresh。私の実験から、このメソッドが前に呼び出されていることに気付きましたonShow。したがって、私の推測では、ビューはまだ DOM にアタッチされていません。しかし、ドキュメントは次のように述べています。

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

そのヒントを教えていただけますか?

前もって感謝します。

4

1 に答える 1

3

それだけの価値はありますが、あなたが言ったことはすべて多かれ少なかれ正しいと思います.

ソース (ここで入手可能- 「DomRefresh」を探してください) を見ると、MonitorDOMRefresh ビットがすべてのビューに混在しており、次の API を追加します。

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

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

つまり、実際に起こっているのは、ビューに 2 つのイベント リスナーをアタッチし、コールバック ( handleShow/ handleRender) がブール値の_isShownor_isRenderedと calltriggerDomRefreshを設定することだけです。つまり、次のようになります。

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

onDomRefreshビューがレンダリング、表示、再レンダリングされるたびに呼び出されます。

それが役立つことを願っています!

于 2013-08-11T00:08:10.813 に答える