backfire示例中collection add事件的触发问题

来源:互联网 发布:python del函数 编辑:程序博客网 时间:2024/05/24 06:41

backfire是将firebase 绑定到backbone.js的一个库, 随代码提供了一个用backfire实现的todo程序示例。在该示例中程序初始化的时候 并没有显式的触发collection的add事件,代码如下:

initialize: function() {  this.input = this.$("#new-todo");  this.allCheckbox = this.$("#toggle-all")[0];  this.listenTo(Todos, 'add', this.addOne);  this.listenTo(Todos, 'reset', this.addAll)  this.listenTo(Todos, 'all', this.render);  this.footer = this.$('footer');  this.main = $('#main');},

那么todo列表是怎么显示出来的呢
在Backbone.Firebase.Collection的_childAdded方法和AppView的initialize方法中分别加入一句调试语句

_childAdded: function(snap) {  console.log('child add: ' + (new Date).getTime()); //记录数据开始加入collection的时间  Backbone.Collection.prototype.add.apply(this, [snap.val()]);},
initialize: function() {  this.input = this.$("#new-todo");  this.allCheckbox = this.$("#toggle-all")[0];  this.listenTo(Todos, 'add', this.addOne);  console.log('listen add: ' + (new Date).getTime()); //记录侦听开始时间  this.listenTo(Todos, 'reset', this.addAll)  this.listenTo(Todos, 'all', this.render);  this.footer = this.$('footer');  this.main = $('#main');},

输出之后可以发现 child add 在 listen add 之后,这就说明了firebase的数据获取有一定延迟,导致数据加载出现在事件侦听之后, 所以就可以触发侦听的事件了,也就不用显式的触发了。

0 0