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 № 1Você 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);
}
});