Backbone.js使用单个模型执行_.each循环

时间:2014-08-27 01:39:34

标签: backbone.js underscore.js

我有以下代码:

<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.如何实现?

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传递给模板