【问题标题】:If the service returns JSON data, should I still use this.collection. toJSON()?如果服务返回 JSON 数据,我还应该使用 this.collection。 toJSON()?
【发布时间】:2013-04-30 08:45:43
【问题描述】:

在我的主干应用程序中,REST 服务总是返回 JSON 数据,所以我应该始终使用 this.collection.toJSON() 还是可以在集合提取后直接使用 this.collection 将数据绑定到下划线模板?

【问题讨论】:

    标签: backbone.js collections underscore.js fetch


    【解决方案1】:

    最好将 Backbone 的集合/模型对象直接传递给下划线模板,因为它可以方便地将方法添加到输出属性的格式化值的模型中。检查这个例子(假设模型有自定义方法getFormattedDate

    this.$el.html(this.template({collection: this.collection}))
    
    <ul>
    <% collection.each(function (model) { %>
        <li><%= model.getFormattedDate() %> — <%= model.escape('title') %></li>
    <% }); %>
    </ul>
    

    但是如果你决定直接传递 JSON 数据,那么你就不能输出格式化的日期:

    this.$el.html(this.template({collection: this.collection.toJSON()}))
    
    <ul>
    <% _.each(collection, function (model) { %>
        <li><%= model.date %> — <%- model.title %></li>
    <% }); %>
    </ul>
    

    UPD:我在下划线模板中转义值是错误的,因为您可以使用&lt;%- content %&gt; 语法输出转义内容。因此,将模型和集合直接传递给下划线模板的唯一好处是能够使用格式化数据的自定义 getter。

    【讨论】:

    • 最好使用getter setter。像model.get('title')。这是最佳做法。
    • &lt;%- model.get('title') %&gt; - 也打印转义的标题
    • @VitaliyPetrychuk 酷,不知道。但我仍然认为将集合和模型直接传递给模板会更好。
    猜你喜欢
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2023-03-22
    • 2010-11-03
    相关资源
    最近更新 更多