繁体   English   中英

Backbone.Marionette嵌套ItemView要么不渲染或渲染“空白”视图/模板

[英]Backbone.Marionette nested ItemView either not rendering or rendering “blank” view/template

在导航到特定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不起作用。 我打算在ItemView上集成一个手写的render()方法,我是这样保留的吗?

原始代码的问题是这一行:

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

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

您需要更改代码以使用视图el填充textInput01。 另请注意, this.ui.textInput01已经是一个jQuery选择对象,因此您无需再次包装它。


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM