【问题标题】:How does marionette attach rendered views to the DOMMarionette 如何将渲染视图附加到 DOM
【发布时间】:2016-05-05 03:48:31
【问题描述】:

我正在尝试使用 Marionette 进行非常简单的设置。

我有一个带有集合的视图:

var MyItemsView = Marionette.View.extend({
    template: "#some-template"
});

var view = new MyItemsView({
    collection: new Backbone.Collection([1,2,3,4,5])
});

模板直接嵌入到我的 HTML 中

<script id="some-template" type="text/html">
        <ul>
            <% _.each(items, function(item){ %>
            <li> <%= item %> </li>
            <% }); %>
        </ul>
</script>

我没有输出。

当我尝试使用 view.render() 时,我也没有得到任何输出。 当我登录console.log(view.render().el) 时,我只是得到一个空的&lt;div&gt; 我不明白这怎么会发生?视图不应该使用提供的模板吗?

另一个更新。这将使用 ItemView 或 LayoutView 进行渲染,但不会使用 View... wtf 正在这里进行。

此示例直接取自 Marionette 网站。我在这里做错了什么吗?

【问题讨论】:

    标签: javascript jquery templates backbone.js marionette


    【解决方案1】:

    您使用的是哪个版本的 Marionette?如果您使用的是 3.0.0 之前的版本(当前为测试版),您应该从 Marionette 文档 (v2.4.5) 中的 ItemView 而不是 View 扩展:

    注意:Marionette.View 类不能直接使用。 它作为其他视图类扩展的基础视图存在, 并为跨平台共享的行为提供一个公共位置 所有视图。

    此行为在 v3.0.0 中发生变化,ItemView 看起来好像已被删除。

    【讨论】:

    • 根据阅读文档和来源,这是正确的答案。我确实试图以错误的方式使用这个类。谢谢先生。
    【解决方案2】:

    从外观上看,它创建了一个内存中的视图。

    您需要使用el 选项告诉它您希望将此视图内容附加到何处,

    否则你应该手动追加到 DOM 像

    $('body').append(view.el)
    

    【讨论】:

    • 更新了我的问题。这似乎不适用于 View,但适用于所有其他类型的 View...
    • @DanielTate 是在实际脚本之后添加的模板脚本吗?你能创建一个minimal reproducible example吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多