_.after:与上下文混淆

时间:2014-06-07 17:26:32

标签: backbone.js underscore.js

我在Backbone.view

中扩展了这个功能
toggle: function () {
   var sempurna = _.after(array_obj.length, this.render);
   _.each(array_obj, function (v,k) {
      v.perormSomething();
      delete array_obj[key];
      sempurna();
  }, this);
}

所以我认为我可以立即渲染视图循环完成。但不知何故,this关键字引用了window而不是视图。如何指向要查看的预期this

1 个答案:

答案 0 :(得分:3)

this设置为window,因为您正在调用sempurna()而没有点符号(因此没有任何明确的接收对象)。

要解决此问题,您需要_.bind(或使用浏览器本机绑定,如果可用)sempurnathis

toggle: function () {
   var sempurna = _.bind(_.after(array_obj.length, this.render), this);
   _.each(array_obj, function (v,k) {
      v.perormSomething();
      delete array_obj[key];
      sempurna();
  }, this);
}

演示JSFiddle