我有以下代码:
<script type="text/template" id="iterator_template">
<table>
<% _.each(value, function(user) { %>
<tr><td><%= user.name %></td>
<td><%= user.email %></td></tr>
<% }); %>
</tr></table>
</script>
<div id ="iterator_container"></div>
<script type="text/javascript">
(function($){
var UserModel = Backbone.Model.extend({
urlRoot: 'http://localhost/backbone/users',
});
IteratorView = Backbone.View.extend({
el: '#iterator_container',
initialize: function(){
var self = this;
var userDetails = {id:2};
self.user = new UserModel(userDetails);
self.user.fetch({
success: function (user) {
self.render();
}
});
},
render: function(){
var template = _.template( $("#iterator_template").html(), {value: this.user}
);
this.$el.html( template );
},
});
var form_view = new IteratorView();
})(jQuery);
如果服务器返回:
[{"name":"John Hancock","email":"johnhancock@backbone.com"}] ... 1.
没有输出。
如果服务器返回:
{"name":"John Hancock","email":"johnhancock@backbone.com"}
循环执行两次。
我希望循环执行一次1.如何实现?
答案 0 :(得分:0)
不需要循环,因为它只将一个模型传递给模板,如果传递集合
,则应该使用循环<script type="text/template" id="iterator_template">
<table>
<tr><td><%= user.name %></td>
<td><%= user.email %></td></tr>
</tr></table>
</script>
backbone希望响应为数组,但该值从服务器返回
[{"name":"John Hancock","email":"johnhancock@backbone.com"}]
是对象,因此无法正常工作
编辑:回答您的评论
在您的模型中编写此解析函数
parse : function(response){
return response[0];
}
这将从对象返回数组并将值设置为model
现在在success
回调模型添加到collection
mymodel.fetch({
success : function(){
mycollction.add(mymodel);
}
})
将模板保留在问题中,然后将此collection
作为JSON
传递给模板