Backbone集合没有这样的方法

时间:2013-03-31 16:14:47

标签: javascript jquery backbone.js requirejs

我有一个主干集合可以获取一些数据但是当我尝试使用每种方法迭代集合时它会得到

Object [object Array] has no method 'each' 

以下是该集合的模型:

define (['backbone'],function(Backbone){
    return Backbone.Model.extend({
        url:'http://some_url/api/post/',
   });
});//end define

收藏品本身: “

   define (['backbone','models/Post'],function(Backbone,Post){
return Backbone.Collection.extend ({
    model: Post,

    initialize: function (model)
    {
        this.userId = model.userId;
        this.start = model.start;
    },

    url: function ()
    {
        return "http://some_url.com/api/post?userid=" + this.userId + "&start=" + this.start;
    },

    parse: function (response)
    {
        return response;
    }

    });
  });

这是实例化使用集合的视图的调用:

cookieVal = document.cookie.split ("; ");
                posts = new PostCol ({userId:id =   cookieVal[0].split('=')[1],start:1});

                posts.fetch ().success (function (response){
                    post = new Post({collection:response});
                    post.render();
                    console.log (post.el);
                });

使用集合的视图的实现:

 define (['jquery','underscore','backbone','views/Actor'],function($,_,Backbone,Actor){
return Backbone.View.extend ({
    className:'moment mb30',

    render: function ()
    {
        console.log (this.collection);
        this.collection.each (function (model){
            actor = new Actor ({model:model});
            this.$el.append (actor.render().el);
        },this);
        return this;
    }
});
});

为什么每种方法都不起作用,如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

这是一个更惯用的方法,可以修复你的错误,虽然你的代码有点奇怪,我没有看到它的具体错误。

 posts = new PostCol({userId:id =   cookieVal[0].split('=')[1],start:1});
 post = new Post({collection:posts});
 posts.on('reset', post.render.bind(post)); //This should really go in PostView initialize
 posts.fetch();

答案 1 :(得分:-1)

没有这样的方法each()。你的意思是forEach()?您需要在Backbone的页面中包含underscore.js才能使用迭代函数。