/ / Подчертание: Губене на препратка към колекцията при филтриране - javascript, backbone.js, underscore.js

Подсказка: Загубата на справка за събирането при филтриране - javascript, backbone.js, underscore.js

Използвам fetch () fetch (), за да получа колекцията си. Тъй като това отнема много време и често се филтрира, така че не е необходимо да го извличате () многократно. Опитвам се да го направя така:

if(!App.fetch){
App.fetch = new App.Collection.Artists();
App.fetch.fetch()
}
var c = _.filter(App.fetch.models, function(model){
return model.get("date") == day && model.get("stage") == stage
});
var c = new App.Collection.Artists(c);

Какво мисля, че правя: ако няма кеширана колекция, създайте такава и я донесете. Ще мога да използвам тази функция с различни стойности „ден“ и „етап“, за да филтрирам App.fetch, който се попълва само веднъж и не се докосва отново.

Когато вляза в събитието. ("Промени") при събиране, се задейства събитието за промяна. Предполагам, че методът на филтри задейства събитието за промяна и резултатът е, че той работи само първия път!

Въпросът ми е защо не е как мисля, че правя и как бих се справил с този проблем.

EDIT: Проблемът е, че вторият път, когато се извиква тази функция, се връщам 0 модела в колекцията "c".

С уважение, Ян

Отговори:

1 за отговор № 1

Вие третирате асинхронно повикване по синхронен начин. Опитайте нещо подобно, като коригирате обхвата на променливите според нуждите:

App.fetch({
success: function() {
var c = _.filter(App.fetch.models, function(model){
return model.get("date") == day && model.get("stage") == stage
});
var c = new App.Collection.Artists(c);
}
});