Javascript 无法使用木偶网加载区域。LayoutView

Javascript 无法使用木偶网加载区域。LayoutView,javascript,marionette,Javascript,Marionette,我正在布局视图中加载预编译的把手模板。我正在定义区域,但是,我得到一个错误: 未捕获错误:DOM中必须存在“el”#questions节(当然该节点存在于模板中) 发生这种情况是因为我使用的是预编译模板吗? 守则: q.boxView = Marionette.LayoutView.extend({ tagName : 'li', className : "sortable_boxes_original", template: Handlebars.templates["

我正在布局视图中加载预编译的把手模板。我正在定义区域,但是,我得到一个错误:

未捕获错误:DOM中必须存在“el”#questions节
(当然该节点存在于模板中)

发生这种情况是因为我使用的是预编译模板吗? 守则:

q.boxView = Marionette.LayoutView.extend({
    tagName : 'li',
    className : "sortable_boxes_original",
    template: Handlebars.templates["repoboxview"],
    initialize : function(){
        this.createQuestionsCollection();
        this.createResponsesModel();
        this.listenTo(this.model.get("response"), 'change', this.triggerChanged);
    },
    regions: {
        questions: "#questions-section"
    },
    onBeforeRender: function(){
      var that = this;
      this.getRegion("questions").show(new q.questionsListView({collection: this.model.get("questions"), model: this.model}));
    } 
}); 

这是因为您试图在区域实际上是DOM的一部分之前在区域中放置一些东西。从:

只有当视图可以访问区域定义中指定的元素时,区域才能填充自身。也就是说,如果视图尚未渲染,则区域可能无法找到指定给它们管理的元素。在这种情况下,使用该区域不会对DOM产生任何更改


因此,不要使用
onBeforeRender()
,而是尝试。

这是因为您试图在区域实际上是DOM的一部分之前将某些内容放入该区域。从:

只有当视图可以访问区域定义中指定的元素时,区域才能填充自身。也就是说,如果视图尚未渲染,则区域可能无法找到指定给它们管理的元素。在这种情况下,使用该区域不会对DOM产生任何更改


因此,与其使用
onBeforeRender()
,不如试试。

添加Kevin的答案,一个更适合将子视图显示到区域的回调是添加Kevin的答案,一个更适合将子视图显示到区域的回调是好的,我已经更新了我的答案。作为一个评论,这会更好,但我看到你还没有发表评论的声誉,所以很公平…是的。。。当我只是想补充你的正确答案时,我觉得发布另一个答案很愚蠢。这一点很好,我已经更新了我的答案。作为一个评论,这会更好,但我看到你还没有发表评论的声誉,所以很公平…是的。。。当我只是想补充你的正确答案时,我觉得发布另一个答案很愚蠢。我知道,但onBeforeShow不是triggered@sica07:您发布的代码使用的是
onBeforeRender()
,而不是
onBeforeShow()
。你是说你在beforeshow()上尝试了
,但没有成功?是的。我尝试了BeforeShow(),但它没有被触发。(很抱歉这么晚才回答,但我要搬家,这几天我很忙)我知道,但在演出之前不是triggered@sica07:您发布的代码使用的是
onBeforeRender()
,而不是
onBeforeShow()
。你是说你在beforeshow()
上尝试了
,但没有成功?是的。我尝试了BeforeShow(),但它没有被触发。(抱歉这么晚才回答,我要搬家,这几天我很忙)