Chr*_*row 5 backbone.js marionette
什么是从儿童期在Backbone.js的或Marionettejs其父Collection视图发送消息的好方法吗?
通常我通过集合发送消息:
ChildView = Backbone.Marionette.ItemView.extend({
send_message: function(){
this.model.collection.trigger('some-message');
}
})
ParentCollectionView = Backbone.Marionette.CollectionView.extend({
// ON RENDER
onRender: function(){
this.listenTo(this.collection, 'some-message', this.do_something);
}
// DO SOMETHING
do_something: function(){
alert('did something');
}
});
Run Code Online (Sandbox Code Playgroud)
我认为这不对,因为:
相反,我想直接从子视图向其父集合视图发送消息.(实际上,我正在使用复合视图,不确定是否重要,但希望保持示例简单).
要么让子视图直接发出事件并让父视图监听它:
ChildView = Backbone.Marionette.ItemView.extend({
send_message: function(){
this.trigger('some-message');
}
})
ParentCollectionView = Backbone.Marionette.CollectionView.extend({
// ON RENDER
onRender: function(){
// no idea how Marionette references its children views
// let's say this.subview is a reference to your child view
this.listenTo(this.subview, 'some-message', this.do_something);
}
// DO SOMETHING
do_something: function(){
alert('did something');
}
});
Run Code Online (Sandbox Code Playgroud)
或者使用您注入子视图的专用事件发射器
ChildView = Backbone.Marionette.ItemView.extend({
send_message: function(){
this.channel.trigger('some-message');
}
})
ParentCollectionView = Backbone.Marionette.CollectionView.extend({
initialize: function(){
this.channel = _.extend({}, Backbone.Events);
this.listenTo(this.channel, 'some-message', this.do_something);
},
// ON RENDER
onRender: function(){
// pass the channel to the child
// that probably should be done when the child is created
this.subview.channel = this.channel;
},
// DO SOMETHING
do_something: function(){
alert('did something');
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
344 次 |
| 最近记录: |