Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 木偶';s CompositeView事件未触发_Javascript_Backbone.js_Marionette_Backbone Events - Fatal编程技术网

Javascript 木偶';s CompositeView事件未触发

Javascript 木偶';s CompositeView事件未触发,javascript,backbone.js,marionette,backbone-events,Javascript,Backbone.js,Marionette,Backbone Events,我在使用木偶的合成视图时遇到问题。我使用模板在CompositeView中渲染模型,并希望向其中添加单击事件。不知何故,我无法使用CompositeView上的events:{“click”:“function”}处理程序使事件正常工作。。。我做错了什么 var FactsMenuItem = Backbone.Marionette.ItemView.extend({ template: tmpl['factsmenuitem'], initialize: function()

我在使用木偶的合成视图时遇到问题。我使用模板在CompositeView中渲染模型,并希望向其中添加单击事件。不知何故,我无法使用CompositeView上的
events:{“click”:“function”}
处理程序使事件正常工作。。。我做错了什么

var FactsMenuItem = Backbone.Marionette.ItemView.extend({
    template: tmpl['factsmenuitem'],

    initialize: function() {
        console.log('factsmenuitem');
    },

    onRender: function() {
        console.log('factsmenuitem');
    }

});

var FactsMenuView = Backbone.Marionette.CompositeView.extend({
    template: tmpl['factsmenu'],

    itemView: FactsMenuItem,

    itemViewContainer: ".subs",

    events: {
        'click': 'blaat'
    },

    blaat: function() {
        console.log('this is not working');
    },

    initialize: function() {
        this.model.get('pages').on('sync', function () {
            this.collection = this.model.get('pages');
            this.render();
        }, this);
    },

    onRender: function() {
        console.log('render factsmenu');
    }

});


var FactsLayout = Backbone.Marionette.Layout.extend({

    template: tmpl['facts'],

    regions: {
        pages: ".pages",
        filter: ".filter",
        data: ".data"
    },

    initialize: function(options) {
        this.currentPage = {};

        this.factsMenu = new FactsMenu();
        this.factsView = new FactsMenuView({model: this.factsMenu});
    },

    onRender: function() {
        this.pages.show(this.factsView);
    }

});
编辑: 我删除了一些使问题不清楚的代码


问题在于compositeview(modelView???)的非collectionview的事件没有激发。我认为这与FactsLayoutView实例化compositeview的方式有关…

也许我没有很好地理解您的问题,但是如果您需要在复合视图中侦听从项目视图触发的事件,您应该执行以下操作

在项目视图
test
方法中

this.trigger("test");
this.on("itemview:test", function() { });
在复合视图中
初始化
方法

this.trigger("test");
this.on("itemview:test", function() { });
请注意,当从
CollectionView
的项目触发事件时(a
CompositeView
CollectionView
),它的前缀是
itemview

希望能有帮助


编辑:再次阅读您的问题,我认为这不是正确的答案,但是关于您的问题,我猜复合视图中的单击被项目视图捕获。你能更好地解释一下你的目标吗

问题是由区域的渲染方式引起的。在我的事实中,Slayout用于此代码:

initialize: function(options) {
    this.currentPage = {};

    this.factsMenu = new FactsMenu();
    this.factsView = new FactsMenuView({model: this.factsMenu});
},

onRender: function() {
    this.pages.show(this.factsView);
}
显然,您无法在onRender函数上显示视图。。。我必须更改FactsLayout的初始化方式:

var layout = new FactsLayout({
    slug: slug
});
layout.render();

var factsMenu = new FactsMenu({ slug: slug });
var factsView = new FactsMenuView({model: factsMenu});

layout.pages.show(factsView);

很抱歉我不清楚。。。问题不是关于项目视图中的事件(那些正在工作…),而是关于CompositeView上的事件(在factsmenu模板中…)@thomasjonas可以发布一些关于模板的详细信息吗?非常抱歉,你的回复太晚了。事实证明,它与页面区域的呈现/显示方式有关(请参见我的答案)。您能告诉我如何获取发生测试事件的itemview的模型吗?@SandipArmalPatil请打开一个新问题并在此处添加引用。谢谢