web-dev-qa-db-ja.com

marionette.jsのonShowとonRenderの違いは何ですか?

私はMarionette.jsを初めて使用し、既存のBackbone.jsコードをリファクタリングしているときに、Marionetteビュー(itemview)に2つのコールバック(onRenderとonShow)があることに気付きました。それらの違いとより良い使い方は何ですか?

ただし、ソースコードを見ると、「render」イベントと「show」イベントの両方が「view initialize」内で発生していると思います。

constructor: function(){
    _.bindAll(this, "render");

    var args = Array.prototype.slice.apply(arguments);
    Backbone.View.prototype.constructor.apply(this, args);

    Marionette.MonitorDOMRefresh(this);
    this.listenTo(this, "show", this.onShowCalled, this);
}
18
addisu

onShow:ビュー自体は「表示」イベントをトリガーしません。地域によってトリガーされます。したがって、場合によっては呼び出されません。

onRender:このメソッドは、ビューがレンダリングされるたびに実行されます。

19

Vitaliyの答えには完全に正しくないものがあると思います。正しいものは次のとおりです。

onShow:ビュー自体は「表示」イベントをトリガーしません。地域によってトリガーされます。したがって、場合によっては呼び出されません。

onRender:このメソッドは、ビューがレンダリングされるたびに実行されます。

'onRender'が実行されていることに注意してくださいオブジェクトが実際にDOMに追加されることを意味するわけではありません。それは単にレンダリングされたことを意味するだけです(テンプレートにデータが入力され、処理するthis。$ elなどがあります)。

一方、'show'イベントがリージョンからトリガーされたため、 'onShow'が呼び出された場合、および通常、リージョンはDOM内の要素を表すため、 'onShow'が呼び出されると、ビューが実際にDOMに追加されることが予想されます。

41

まあ、これはマリオネットのshowメソッドであり、質問を説明しています

show: function(view){

       this.ensureEl();

       var isViewClosed = view.isClosed || _.isUndefined(view.$el);

       var isDifferentView = view !== this.currentView;

       if (isDifferentView) {
         this.close();
       }

       view.render();

       if (isDifferentView || isViewClosed) {
         this.open(view);
       }

       this.currentView = view;

       Marionette.triggerMethod.call(this, "show", view);
       Marionette.triggerMethod.call(view, "show");
     }
7
addisu

バージョン3では、領域イベントshowおよびbefore:showはビューでトリガーされなくなりました。ほとんどの場合、renderおよびbefore:renderイベントを使用できます。ビューがDOMにあることを知る必要がある場合は、attachまたはdom:refreshを使用できます

info http://blog.marionettejs.com/2016/08/23/marionette-v3/index.html

0
zloctb