Javascript “具有主干的奇怪问题绑定事件”;这";没有被更新

Javascript “具有主干的奇怪问题绑定事件”;这";没有被更新,javascript,backbone.js,this,dom-events,Javascript,Backbone.js,This,Dom Events,我在处理主干和绑定事件时遇到了一个奇怪的问题。我会看看我是否能以一种清晰的方式解释它(这是一个裁剪过的示例…) 在视图中,我在initialize方法中有以下代码 var MyView = Backbone.View.extend({ initialize: function(options) { //[...] this.items = []; this.collection.on('reset', this.updateItems, this); thi

我在处理主干和绑定事件时遇到了一个奇怪的问题。我会看看我是否能以一种清晰的方式解释它(这是一个裁剪过的示例…)

在视图中,我在initialize方法中有以下代码

var MyView = Backbone.View.extend({

  initialize: function(options) {
    //[...]
    this.items = [];
    this.collection.on('reset', this.updateItems, this);
    this.fetched = false;
  },

  render: function() {
    if (!this.fetched) {
      this.collection.fetch();  // fetch the collection and fire updateItems
      return this;
    }
    this.$el = $('#my-element');
    this.$el.html(this.template(this.items));
  },

  updateItems: function() {
    this.fetched = true;
    this.loadItems();
    this.render();   // call render with the items array ready to be displayed
  }
}
我的想法是,我必须获取集合,处理项目(
this.loadItems
),然后设置
this。$el

我面临的问题是,在
updateItems
中,我看不到绑定后添加的任何属性(
this.collection.on

似乎绑定是针对视图的冻结版本进行的。我尝试添加属性来测试它,但是在
updateItems
内部(如果集合重置事件触发,则在render内部),我看不到添加的属性

在获取集合之前,我解决了绑定集合的问题,如下所示:

  render: function() {
    if (!this.fetched) {
      this.collection.on('reset', this.updateItems, this);
      this.collection.fetch();
      return this;
    }
但这是一种奇怪的行为。似乎在绑定时,会制作“this”的副本,而不是引用


我说得对吗?或者我做错了什么?

您应该在集合视图的初始化阶段执行绑定:

// View of collection
initialize: function() {
    this.model.bind('reset', this.updateItems);
}
现在,当集合上的fetch完成时,updateItems方法将被调用。 当然,在执行此操作之前,您需要绑定模型和视图:

var list = new ListModel();
var listView = new ListView({model: list}); 

list.fetch();

你应该使用而不是
这个。$el=…
但我认为这不是问题所在。你能展示一下你在哪里/如何创建MyView实例吗?非常感谢你的回复,我正试图用一个完整的例子从头开始重现这个问题,到目前为止无法实现,一切都按预期进行。谢谢你的回复,这是我尝试做的第一件事(检查我的例子),但很明显,Y偶然发现了一些奇怪的行为,我将尝试重现它