2015-01-16 3 views
1

Я, кажется, правильно выбираю сервер с помощью магистрали. Запрос GET выполнен в коллекцию MongDB, с помощью кода Node.js сервера здесь:Магистральная выборка не правильная выборка

exports.getTeams = function(req,res,next){ 

    var system_db = req.system_db; 
    var user_id = req.mainUser._id; 

    var teams = teamModel.getNewTeam(system_db,user_id); 

    teams.find({}, function (err, items) { 
     res.json(items); 
    }); 
}; 

Я Fetching от Backbone как так:

var teamCollection = new TeamCollection([]); 
teamCollection.url = '/api/teams'; 
teamCollection.fetch(
    {success:function(){ 
     console.log('teamCollection length:',teamCollection.length); 
     console.log('teamCollection[0]:',teamCollection[0]); 
    }} 
); 

с использованием этой модели и коллекции:

var Team = Backbone.Model.extend({ 
    idAttribute: "_id", 
    urlRoot: 'http://localhost:3000/api/teams' 
}); 

var TeamCollection = Backbone.Collection.extend({ 
    model: Team, 
    initialize: function() { 
     this.bind('add', this.onModelAdded, this); 
     this.bind('remove', this.onModelRemoved, this); 
     this.bind("change", this.onModelChanged, this); 
    }, 
    /* parse: function(data) { 
     //return JSON.stringify(data).objects; 
     //return JSON.parse(data).objects; 
     return data.objects; 
    },*/ 
    onModelAdded: function(model, collection, options) { 
     console.log("added, options:", options); 
    }, 
    onModelRemoved: function (model, collection, options) { 
     console.log("removed, options:", options); 
    }, 
    onModelChanged: function (model, collection, options) { 
     console.log('Collection has changed.'); 
    }, 
    comparator: function (model) { 
     return model.get("_id"); 
    } 
}); 

проблема заключается в том, что операторы лесозаготовительных выше журнала следующее в консоли браузера:

enter image description here

В нем говорится, что я отправляю 4 элемента с сервера на сервер Backbone, но первый из них не определен. Как это могло произойти?

ответ

1

Backbone.Collection не является массивом, как объект: он имеет атрибут length, представляющее число моделей, но вы не можете получить доступ к отдельным моделям с помощью индексов, следовательно,

console.log(teamCollection[0]); //undefined 

Чтобы получить модель в данный положение, используйте collection.at .Try

console.log(teamCollection.at(0)); 

и демонстрационное этих моделей поведения http://jsfiddle.net/nikoshr/013gjpny/