По-долу имам колекция, която извлича списък със съобщения от RESTful API. (Избрах колекция, защото в крайна сметка ще съхранява анализираните данни.)
My View е настроен да следи за промени в колекцията (т.е. когато се получи ново съобщение). Изглежда обаче колекцията не задейства събитие за промяна или задаване, когато новите данни се съхраняват. Регистрирал съм колекцията преди и след това, за да потвърдя, че нейният атрибут за резултати е променен.
Няколко въпроса:
- Защо събитие „промяна“ не се случва, когато се получат уникални данни?
- Очаквам да стартирам setInterval на моята функция fetchMessages, за да проверявам непрекъснато за актуализирани данни от сървъра. Има ли по-добър начин за проверка за актуализации в Backbone?
Благодаря за вашата помощ!
Колекция
var AllMessages = Backbone.Collection.extend({
model: Message,
url: 'http://arestfulapi.com',
fetchMessages: function(){
var that = this;
this.fetch({
data: {
'order': '-createdAt',
'limit': 10
},
success: function(model, data){
// we want the array in data.results
that.set(data.results) // this should trigger a change event ?
}
});
}
});
Преглед
var MessageViewer = Backbone.View.extend({
initialize: function(){
this.collection.on('change',this.log,this); // does not get called from above
},
log: function(e){
console.log('triggered');
}
});
Инстанция
var allMessages = new AllMessages();
var messageViewer = new MessageViewer({collection:allMessages});
reset
така. Вместо това използвайте флага{reset: true}
при извличане. Тук всъщност казвате на Backbone да направи интелигентна актуализация на вашата колекция и след това да я нулира веднага след това. Сега, ако използвате флага за нулиране, ще можете също да слушате събитиетоreset
. Но като видя какъв код имате, не съм сигурен, че наистина искате да нулирате колекцията си... - person Loamhoof   schedule 11.10.2013