3

下面我有一个从 RESTful API 获取消息列表的集合。(我选择了一个集合,因为它最终会存储解析的数据。)

我的视图设置为监视集合中的变化(即收到新消息时)。但是,在存储新数据时,集合似乎不会触发更改或设置事件。我之前和之后都记录了 Collection 以确认其结果属性已更改。

几个问题:

  1. 为什么接收到唯一数据时不会发生“更改”事件?
  2. 我预计在我的 fetchMessages 函数上运行 setInterval 以不断检查来自服务器的更新数据。有没有更好的方法来检查 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});
4

1 回答 1

6

解决了:

根据Backbone.js 事件目录

  • 当模型被添加到集合中时“add”触发。
  • 当模型的属性发生变化时触发“变化”。

由于此集合将模型添加到现有属性(“模型”),而不是更改属性,因此会触发“添加”事件。初始的“模型”属性包含一个空数组与此处无关。

于 2013-10-11T21:43:52.337 回答