当Collection收到新数据时,Backbone Fetch不会触发Change事件

时间:2013-10-11 05:45:24

标签: javascript events backbone.js fetch

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

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

几个问题:

  1. 为什么收到唯一数据时“更改”事件无法发生?
  2. 我期望在我的fetchMessages函数上运行setInterval,以不断检查来自服务器的更新数据。有没有更好的方法来检查Backbone中的更新?
  3. 感谢您的帮助!

    集合

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

1 个答案:

答案 0 :(得分:6)

解决:

根据Backbone.js Catalog of Events

    将模型添加到集合时,
  • “添加”触发器。
  • 当模型的属性发生变化时,
  • “更改”触发。

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