2017-02-09 11 views
0

В моей коллекции 4494 модели. Я пытаюсь использовать findWhere для получения конкретной модели по id. FindWhere возвращает «undefined».Магистраль findWhere ничего не находит

Он работает нормально, если я ограничу количество моделей. Странность heppens, когда число моделей составляет более 100.

var users = this.usersCollection; 

console.log(users); 

console screen

console.log(users.findWhere({uid: 1})); 

collection screen

+0

Если ваша коллекция такая большая, я предлагаю вам использовать индекс для поиска ваших объектов, а не 'find' в первую очередь. Тем не менее, поведение странно ... – Touffy

+0

Кажется, работает как ожидалось https://jsfiddle.net/r1Ljx6fg/ – nikoshr

+0

Да, это работает. Странный. Я вижу в коллекции, что каждая 100 моделей обернуты массивом. В примере нет ничего подобного. Что не так с моей коллекцией? Я прикрепил экран –

ответ

0

Проблема заключалась в том, что я пытался использовать свою коллекцию, прежде чем она была полностью извлечена.

0

Хотя проблема решена (использованием findWhere перед темколлекция фактически получена) спасибо TJ's comment, вы можете использовать .get вместо findWhere при поиске модели по id.

Если User модель выглядит примерно так:

var User = Backbone.Model.extend({ 
    idAttribute: 'uid', 
    // ... 
}); 

Вы можете получить пользователя по идентификатору из коллекции непосредственно:

var user = users.get(1); 

Вы также можете использовать get с модели cid или образцом модели.

user === users.get(user.cid) 
user === users.get(user) 

Это лучше, потому что Backbone хранит хэш моделей с указанным идентификатором атрибута в качестве ключа в дополнение обычного массива.

+0

Хороший совет, я буду помнить это в следующий раз, спасибо! –