коллекция магистрали возвращается как массив объектов, но не может использовать .each - PullRequest
0 голосов
/ 09 марта 2012

Я чувствую, что я был в этой проблеме раньше, но это отличается от других времен.

У меня есть коллекция событий, и мне нужно перебрать их.

Я создаю свою коллекцию

MyApp.Collections.UserEvents = Backbone.Collections.extend({
    model: MyApp.Models.Event,
    url: 'user_events/' + User.id,
    initialize: function() {
    }
});

MyApp.Models.Event = Backbone.Model.extend({});

Я получаю коллекцию в моем роутере, а затем получаю представление

MyApp.userEvents = new MyApp.Collections.UserEvents();
MyApp.userEvents.fetch({
    success: function() {
        MyApp.UserEvents.trigger(new MyApp.Views.UserEvents);
    }
});

в представлении я пытаюсь перебрать события

MyApp.Views.UserEvents = Backbone.Views.extend({
    el: 'div#user_events',
    initialize: function() {
        user_events = MyApp.userEvents.models;
        console.log(user_events);
        this.render();
    },
    render: function() {
        user_events.each(this.add);
    },
    add: function(event) {
        console.log(event)
    }
});

в моей консоли я получаю

[d, d, d, d, d, d, d, d, d, d, d, d, d, d]

UserEvents.js:16Uncaught TypeError: Object [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] has no method 'each'

Так что, как я вижу, у меня есть массив событий, но по какой-то причине я не могу получить каждое из событий, просматривая их.

1 Ответ

4 голосов
/ 09 марта 2012

Проблема в том, что вы вызываете каждую функцию на MyApp.userEvents.models, которая является необработанным массивом javascript и поэтому не имеет функции каждой. Вы должны вызывать каждую функцию в самой коллекции, например:

MyApp.userEvents.each( this.add );

Или, если вы действительно хотите использовать массив, а не объект коллекции, вы можете использовать Underscore.js напрямую:

_.each( user_events, this.add, this );
...