Backbone.Marionette ItemView控件嵌套或者没有渲染或呈现“空白”视图/模板

2019-10-17 08:32发布

在导航到一个特定的URL,控制方法被触发,它加载的ItemView控件到我的应用程序的地区之一。 这本身ItemView控件(父)将包含子ItemViews了一把,使它们都当它呈现本身。 这里的家长ItemView控件:

return Backbone.Marionette.ItemView.extend({
    template: Handlebars.compile(template),
    ui: {
        textInput01: "#text-input-01"
    },
    events: {
        // no events yet
    },
    initialize: function() {
        // no init yet
    },
    onRender: function() {
        this.appRoutefinderTextinputItemView = new AppRoutefinderTextinputItemView({parentView: this});

        $(this.ui.textInput01).html(this.appRoutefinderTextinputItemView.render());
    }
});

而这里的当前唯一的ItemView控件:

return Backbone.Marionette.ItemView.extend({
    template: Handlebars.compile(template),
    events: {
        // no events yet
    },
    initialize: function() {
        // no init yet
    },
    onRender: function() {
        // no onRender yet
    }
});

出于某种原因,我无法捉摸,虽然双方的initializeonRender对孩子的方法是射击,和所有必要的数据似乎是目前,孩子要么不被渲染或“空白”的方式被呈现,从而导致不变父视图。

据我了解,我不应该需要调用render()的孩子,因为它实例/引用的ItemView控件当的暗示? 甚至当我把render()调用,同样的结果来。

我必须假设有一些关于从我只是缺少其他ItemViews内再现ItemViews,而是通过文档淘似乎并没有帮助。

次要的问题是:我该实例子视图以正确的方式,还是有更好的方式来做到这一点?

*编辑 - 所以一些试验后,出现了“接受”的解决方案很简单,就是让家长图的布局,这是一个扩展ItemView控件。 这并不工作。 不过,我仍然在想为什么一个ItemView控件中的ItemView控件不起作用。 我是打算手写集成render()方法在ItemView控件,是我要保持这种方式?

Answer 1:

与原有代码的问题是这一行:

$(this.ui.textInput01).html(this.appRoutefinderTextinputItemView.render());

render骨干视图的方法不返回呈现的HTML。 此方法执行渲染和更新el的看法。 该方法的返回值是视图本身。 木偶不会改变此行为。

您需要更改代码视图的填充textInput01 el 。 还要注意的是this.ui.textInput01已经是一个jQuery选择的对象,所以你并不需要再次换行。


this.appRoutefinderTextinputItemView.render();
this.ui.textInput01.html(this.appRoutefinderTextinputItemView.el);


文章来源: Backbone.Marionette nested ItemView either not rendering or rendering “blank” view/template