でCompositeViewの上のイベントをレンダリングします。は後に、私は、検索パネルと結果データの収集とマリオネットCompositeViewのを持ってBackbone.Marionette
私は、関数を呼び出したいとき:
- 検索パネルがレンダリングされます。
- コレクションは、まだレンダリングされていません。コレクションがレンダリングされるとき
- この関数が呼び出されるべきではありません。
私はこの方法でそれをやった。(ただし、「afterRender」関数が二回呼び出される)
// VIEW
App.MyComposite.View = Backbone.Marionette.CompositeView.extend({
// TEMPLATE
template: Handlebars.compile(templates.find('#composite-template').html()),
// ITEM VIEW
itemView: App.Item.View,
// ITEM VIEW CONTAINER
itemViewContainer: '#collection-block',
//INITIALIZE
initialize: function() {
this.bindTo(this,'render',this.afterRender);
},
afterRender: function() {
//THIS IS EXECUTED TWICE...
}
});
私はこれをどのように行うことができますか?
========================== EDIT =================== ===============
私はあなたの観察を持っているなら、私に知らせてください、この方法でそれを解決しました。
// VIEW
App.MyComposite.View = Backbone.Marionette.CompositeView.extend({
// TEMPLATE
template: Handlebars.compile(templates.find('#composite-template').html()),
// ITEM VIEW
itemView: App.Item.View,
// ITEM VIEW CONTAINER
itemViewContainer: '#collection-block',
//INITIALIZE
initialize: function() {
// this.bindTo(this,'render',this.afterRender); // <-- not needed
},
onRender: function() {
// do stuff after it renders, here
}
});
しかしコレクションがあるとき、それは仕事をしないために取得する:あなたがthis.bindTo(this, 'render', this.afterRender)
コールを取り除くことができるように
// VIEW
App.MyComposite.View = Backbone.Marionette.CompositeView.extend({
//INITIALIZE
initialize: function() {
//this.bindTo(this,'render',this.afterRender);
this.firstRender = true;
},
onRender: function() {
if (firstRender) {
//DO STUFF HERE..............
this.firstRender = false;
}
}
});
http://marionettejs.com/docs/marionette.view.html#view-onshowはあなたのイベントのバインディングにいくつかの詳細を記入してくださいと – schacki
が呼び出されたときにrenederこれは、初期化関数であります
onShow
機能を使用します(これを「this.bindTo、 'レンダリング'、this.afterRender) "私はこれが正しいかどうかは分かりませんが、私がしたいことは、ビューがレンダリングされたら "afterRender"関数を呼び出すことです。 –