2012-05-10 42 views
1
,debouncedAjax: _.debounce(_.bind(myFunction, this), 2000) 

,request: function(requestParams, response){ 
    this.debouncedAjax(requestParams, response); 
} 

设置它,当我可以申请,我得到这个设置功能在Backbone.js的财产给我一个错误,但它的作品,如果我在初始化方法

Uncaught TypeError: Cannot call method 'apply' of undefined (anonymous function)

如果我设置去抖功能对这样的debouncedAjax属性的结果

,initialize: function() {    
     this.debouncedAjax = _.debounce(this.imoveisAjaxRequest, 2000);   
    } 

它工作正常!

为什么?

BTW:debounce是一个来自AMAZING underscore.js框架的函数!

回答

3

在Javascript中有很多东西,它归结为this指针的含义。

在第一个例子中,你可能定义了一个类的原型。如果不是明确的,那么在Backbone.something.extend()调用中,这是同样的事情。那时,你正在绑定一个函数_.bind(myFunction, this)。那么this指针在那一点上指的是什么呢?这当然不是该对象的任何特定实例,因为它们尚未创建。它可能是window或Backbone框架中的某个东西。

当您在initialize函数中调用该函数时,this指针意味着您想要它,所以一切都按您的要求运行。

+0

那么没有其他办法可以做到吗? –

+0

如果您想保留'this'的含义,请不要使用。另外,我认为如果你在原型中消除了这个功能,它将会在整个课程中发生反弹。我不确定在这种情况下防反弹是否会给你带来正确的结果 - 它可能会放弃一些你宁愿不打的电话。 –

+1

@Cfontes:通常,需要'_.bind'或'_.bindAll'的任何东西都在'initialize'内完成,这样'this'就是你想要的。因此'_.bindAll(this,...)'你在许多视图构造函数中看到的东西。 –

相关问题