当收到下面的 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/