javascript - backbonejs-当 json 响应用域书包装时,无法渲染集合对象的字段

标签 javascript json backbone.js

当收到下面的 json 数据时, View 和 html 代码会在 html 页面中正确呈现这些值。

JSON 数据

[{"id":"1234","name":"book1","type":"catg1"},{"id":"1235","name":"book2","type":"catg1"},
        {"id":"1236","name":"book3","type":"catg1"},
        {"id":"1237","name":"book4","type":"catg1"},
        {"id":"1238","name":"book5","type":"catg1"}]

集合和模型

var books= Backbone.Collection.extend({
      url: '/books'
    });

    var Book= Backbone.Model.extend({
      urlRoot: '/books'
    });

查看

var bookListView = Backbone.View.extend({
          el: '.page',
          render: function () {
            var that = this;
            var books= new Books();
            books.fetch({
              success: function (banks) {
                var template = _.template($('#book-list-template').html(), {books: books.models});
                that.$el.html(template);
              }
            })
          }
        });

使用上述模板呈现的 HTML

 <% _.each(books, function(book) { %>
          <tr>
            <td><%= htmlEncode(book.get('id')) %></td>
            <td><%= htmlEncode(book.get('name')) %></td>
            <td><%= htmlEncode(book.get('type')) %></td>

        <% }); %>

但是,我尝试了各种方法来使用下面的 Json 响应执行类似的操作,但失败了。谁能解释一下如果 Json 数据如下所示,我应该在逻辑中改变什么

    {"book":[{"id":"1234","name":"book1","type":"catg1"},
{"id":"1235","name":"book2","type":"catg1"},
    {"id":"1236","name":"book3","type":"catg1"},
    {"id":"1237","name":"book4","type":"catg1"},
    {"id":"1238","name":"book5","type":"catg1"}]}

最佳答案

默认情况下,Backbone 集合在 .fetch 调用的响应中采用一个数组。因此将其更改为 JSON 结构意味着您需要先解析数据。覆盖您的集合的 parse 函数应该可以解决您的问题。请参阅http://backbonejs.org/#Collection-parse了解更多信息。

var Book = Backbone.Model.extend({});
var books= Backbone.Collection.extend({
  url: '/books',
  model: Book,
  parse: function(data) {
    return data.book;
  }
});

您可以添加您认为适合该解析函数的任何其他错误/解析。响应类型应该是 Book JSON 数组。

关于javascript - backbonejs-当 json 响应用域书包装时,无法渲染集合对象的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36672065/

相关文章:

使用 JSON 的 JavaScript 编程逻辑

json - 文件移动/复制操作后 Jupyter Notebooks 不可读

android - 无法在 Android 中解析 JSonArray

javascript - 使用 Jasmine 在 CoffeeScript 中测试 Backbone.js 时出现类型错误

javascript - 根据 jQuery 中另一个选择器的选项隐藏/显示选择选项

javascript - 如何在 Android 上使用 Javascript Core (JSC)?

javascript - 如何使用jquery检查JSON返回是否为空

c# - 将此 json 反序列化为正确的 C# 结构是什么?

javascript - Backbone.js 路由器模式对浏览器 "back"按钮或直接导航的不同响应

jquery - Backbone.Marionette 布局使用其区域之一的 subview 触发的事件