无法用木偶.layoutview加载区域

Not able to load a region with Marionette.LayoutView

本文关键字:layoutview 加载 区域      更新时间:2023-09-26

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

Uncaught Error: An "el" #questions-section must exist in DOM(当然该节点存在于模板中)。

这是因为我使用了预编译的模板吗?代码:

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

添加Kevin的答案,一个更适合显示子视图到区域的回调是onBeforeShow()

发生这种情况是因为您试图在该区域实际上是DOM的一部分之前将某些内容放入该区域。来自文档:

如果视图能够访问区域定义中指定的元素,则区域只能填充自身。也就是说,如果您的视图尚未呈现,您的区域可能无法找到您为其指定的要管理的元素。在这种情况下,使用区域不会导致DOM发生任何变化。

onBeforeShow()代替onBeforeRender()