Backbone.js的 - 不改变的触发而更名(Backbone.js - change not

2019-08-07 19:57发布

在我的骨干作用,而名字得到改改功能并不触发..任何一个建议我以正确的方式得到它。(其实我需要得到改变的东西,需要更新);

代码:

    (function($){

var list = {};

list.model = Backbone.Model.extend({
  defaults:{
    name:'need the name'
  },
  initialize:function(){
    this.bind('change:name', function(model) {
        console.log('Model->change()', model);
    });
  }
});

list.collect = Backbone.Collection.extend({
  model:list.model,
  url : 'data/names.json',
  initialize:function(){
    this.fetch({update:true});
    this.keepUpdate();
  },
  keepUpdate:function(){
    var that = this;
    var updateData = function(){
      that.fetch({update:true});
      myTimeout = setTimeout(updateData,10000);
    }
    var myTimeout = setTimeout(updateData,10000);
  }
});


list.view = Backbone.View.extend({
  initialize:function(){
    this.collection = new list.collect();
    this.collection.on("update", this.render, this);
    this.collection.bind("change:name", function(model, attributes){
      console.log(model,attributes,'property changed'); // this is not triggering at all..
    });
  },
  render:function(data){
    _.each(this.collection.models, function(data){
      //console.log(data.get('name')); it works fine
    })
  },
  updateName:function(){
    console.log('updated called');
  }
});

var newView = new list.view();    

})(jQuery)

Answer 1:

Collection.fetch不会触发change的事件。 你只得到了reset事件。 如果您需要更精细的事件,考虑调用fetch与选项{update:true}

that.fetch({update:true});

这将触发change的事件对于已经集合中的每个模型,并add如果模型是以前没有的收藏。



Answer 2:

尝试从集合删除keepUpdate和放的setTimeout在年底视图的初始化函数。 我建议,获取从视图以及this.collection.fetch(),而不是集合的初始化函数调用。 使你的代码的可重用性。



Answer 3:

我不知道我理解你的问题。 什么是你想达到什么目的?

我不认为取接受{add:true}作为一个参数(我只是检查源代码,并没有出现在任何地方)。

fetch完成,只触发reset事件(而不是add )。 如果你想要做的事,你应该听,当收集的内容发生变化。 您还可以简化听取change



文章来源: Backbone.js - change not triggering while the name change