Javascript 主干线/木偶-如何收听地区活动';什么是儿童观?
我有一个视图,CollectionView在该视图的一个区域内渲染。我如何让View收听CollectionView的事件Javascript 主干线/木偶-如何收听地区活动';什么是儿童观?,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,我有一个视图,CollectionView在该视图的一个区域内渲染。我如何让View收听CollectionView的事件 const ChildCollectionView = marionette.CollectionView.extend({ // ... events: { 'click .bar': 'clickBar', }, clickBar() { this.trigger('clickBar'); },
const ChildCollectionView = marionette.CollectionView.extend({
// ...
events: {
'click .bar': 'clickBar',
},
clickBar() {
this.trigger('clickBar');
},
});
const ParentView = marionette.View.extend({
// ...
regions: {
foo: '.foo',
},
// ...
onRender() {
const fooRegion = this.getRegion('foo');
fooRegion.on('show', function(view) {
// XXX: this does not work
view.on('childview:clickBar', function() {
console.log('click bar');
});
});
fooRegion.show(new ChildCollectionView({
// ...
}))
},
});
看起来你在用木偶3.x。简而言之,您可以使用 至于代码的细节,最好让CollectionView的
childView
定义click事件,因为子视图事件的侦听器将接收已单击的childView。在ParentView
的onRender中使用showChildView
方法也会更好
const ChildView=marionete.View.extend({
// ...
触发因素:{
'单击.bar':'单击:bar',
},
//或
活动:{
'单击.bar':'单击栏'
},
点击栏(){
//其他子视图内容
此.trigger('click:bar');
},
});
const ChildCollectionView=木偶网.View.extend({
// ...
childView:childView,
childViewEvents:{
'点击:栏':'点击栏',
},
工具栏(儿童视图){
//其他视图内容
this.trigger('child:clicked:bar',childView);
//或
this.triggerMethod('child:clicked:bar',this,childView)
}
});
const ParentView=marionete.View.extend({
区域:{
foo:“.foo”
},
childViewEvents:{
'child:clicked:bar':'clickBar'
},
单击栏(collectionChild,clickedChild){
log('click bar',collectionChild.cid,clickedChild.model.cid);
},
onRender(){
this.showChildView('foo',new ChildCollectionView());
}
});
请参阅下面的JSFIDLE,了解查看示例的不同方式以及触发事件的两种不同方式。(从木偶示例中分叉)