2013-06-14 16 views
18

私はMarionette.jsが新しく、私の既存のBackbone.jsコードをリファクタリングしていますが、同じように見えるマリオネットのビュー(itemview)には、onRenderとonShowという2つのコールバックがあることに気付きました。違いと使い方は何ですか?marionette.js onShowとonRenderの違いを表示しますか?

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

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

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

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

+0

はよろしいですか?あなたはこの情報をどこで見つけましたか? –

+0

ありがとう..それは意味がある – addisu

+0

しかし、ソースコードを見ると、私は両方の "レンダリング"と "ショー"イベントが "ビューの初期化"の内部で発生したと思います.... ' コンストラクタ:function(){ _。 bindAll(this、 "render"); var args = Array.prototype.slice.apply(arguments); Backbone.View.prototype.constructor.apply(this、args); Marionette.MonitorDOMRefresh(this); this.listenTo(これは、 "show"、this.onShowCalled、this); } ' – addisu

6

まあ、これはマリオネットでshow方法であり、それは私がVitaliyの答えでは全く正しくない何かがあると思い質問

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"); 
    } 
40

を説明します。正しいことは:

onShow:ビュー自体は 'show'イベントをトリガーしません。それは地域によって引き起こされます。したがって、場合によっては呼び出されません。

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

「onRender」が実行されては、オブジェクトが実際にDOMに追加されていることを意味しないこと。それはちょうどそれがちょうどレンダリングされたことを意味します(データはあなたがこれを持って、テンプレートを満たした。$エルなどに対処するために)

を一方、場合は、「onShow」「ショーので呼ばれます'イベントは領域からトリガされ、領域内の要素は通常DOM内の要素を表しているため、' onShow 'が呼び出されると、ビューは実際にDOMに追加されます。

+1

これは正しいです。DOMに要素が挿入された後にonRenderが起動すると、誤解を招き、多くの人を混乱させます。 –

+2

なぜ答えを改善してみませんか? –

+2

申し訳ありませんが、私はそれを行うことができるか分かりませんでした:/ 私はちょうど答えを編集して変更するか、もっと何かをする必要がありますか? また、私の謝罪:( –

0

バージョン3では、地域イベントが表示され、前:showは表示されなくなりました。 ビューにあります。 renderとbefore:ほとんどの場合、イベントをレンダリングすることができます。あなたはビューがDOMであることを知っておく必要があり なら、あなたは添付したり、DOMを使用することができます:リフレッシュ

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

関連する問題