Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干线/木偶-如何收听地区活动';什么是儿童观?_Javascript_Backbone.js_Marionette - Fatal编程技术网

Javascript 主干线/木偶-如何收听地区活动';什么是儿童观?

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'); },

我有一个视图,CollectionView在该视图的一个区域内渲染。我如何让View收听CollectionView的事件

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,了解查看示例的不同方式以及触发事件的两种不同方式。(从木偶示例中分叉)