/ / Underscore: Perdendo a referência à coleção ao filtrar - javascript, backbone.js, underscore.js

Sublinhado: Perdendo a referência à coleção ao filtrar - javascript, backbone.js, underscore.js

Eu estou usando fetch () do backbone para buscar minha coleção. Como isso leva muito tempo e será filtrado com freqüência, não há necessidade de buscar () várias vezes. Eu estou tentando fazer isso como:

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);

O que eu acho que estou fazendo: se não houver nenhuma coleção em cache, crie uma e busque-a. Eu poderei usar essa função com valores diferentes de "dia" e "estágio" para filtrar App.fetch, que foi preenchido apenas uma vez e não foi tocado novamente.

Quando eu registro o evento on ("change") na coleção, recebo um evento de mudança acionado. Meu palpite é que o método de filtro dispara o evento de mudança e o resultado é que ele só funciona na primeira vez!

Minha pergunta é: por que não é como eu acho que estou fazendo e como resolveria esse problema?

EDIT: O problema é que a segunda vez que esta função é chamada, recebo retornado 0 modelos para a coleção "c".

Atenciosamente, Jan

Respostas:

1 para resposta № 1

Você está tratando uma chamada assíncrona de maneira síncrona. Tente algo como isto, com o ajuste do escopo de variáveis ​​conforme necessário:

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);
}
});