【问题标题】:Rendering an Array as a List within a Backbone model在 Backbone 模型中将数组渲染为列表
【发布时间】:2014-05-07 18:57:19
【问题描述】:

这是我找到的另一个帖子的扩展:Backbone: A list of views inside a view

我很难理解这一点(我以前从未使用过下划线),所以我认为最好发布一个关于此的新主题。

场景

我有一个创建并列出各种信息的群聊模型。这包括该群聊中的参与者列表。我需要将该列表显示为正在渲染的模型的一部分。

代码

创建参与者数组

var participants = [];
$(iq).find('participants').each(function() {
    var participantsNodes = this.childNodes;
    for (var i = 0; i < participantsNodes.length; i++) {
        var participantAttr = participantsNodes[i].attributes
        var participant = participantAttr[0].nodeValue;
            participants.push({"name": participant, "chatid": chatid});
    }
});

...     
model.set({
    participants : participants,
    chatid : chatid
    ...
});

ItemView

GroupChatView = Backbone.Marionette.ItemView.extend({
    template : "#template-groupchat",
    tagName : 'div',
    className : 'alert alert-custom',

    initialize: function(){
        this.$el.prop("id", this.model.get("chatid"));
    },

    ...

正在使用的模板

    <script type="text/template" id="template-groupchat">

        <a id='close-<%= chatid %>' class='close hide' data-dismiss='alert' href='#'>
            &times;
        </a>
        ...
        <div class='row' id='row-participants-<%= chatid %>' style='display: none'>
        <!-- CUSTOM CODE SHOULD BE HERE? My attempt:
            <% _.each(participants, function () { %>
                 <%= name %>
            <% }); %>
        -->
        </div>

    </script>

这会不断返回一个错误,指出“名称”不存在。我不确定我在原始帖子中做错了什么,我认为我将 participants 数组错误地传递给了 underscore.each() 部分。

【问题讨论】:

    标签: javascript backbone.js underscore.js marionette


    【解决方案1】:

    我觉得其中一个问题是您没有将任何参数传递给 _.each 方法。

    <% _.each(participants, function (participant) { %>
       <%= participant.name %>
    <% }); %>
    

    希望它能解决您的问题。

    【讨论】:

    • 太棒了,谢谢!没有意识到我必须使用参与者名称(我链接的原始帖子没有这样做)。
    • 我正在查看underscorejs.org/#each,但无法从中解决这个问题。需要开始正确阅读下划线,你可以用它做一些非常整洁的事情。
    【解决方案2】:

    使用 _.each 函数的正确方法是:

    <% _.each(participants, function (element,index) { %>
               <%= element.name %>
    <% }); %> 
    

    【讨论】:

    • 太棒了,谢谢!没有意识到我必须使用 element.attribute (我链接的原始帖子没有这样做)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多