我正在尝试使用这样的东西:
var a = Marionette.Object.extend({
initialize: function () {
//Works fine
this.listenTo(this, "something", function(){...});
//Problem
(function(){
this.listenTo(this, "somethingElse", function(){...});
})();
//Same...
var b = function(){
this.listenTo(this, "somethingElse", function(){...});
}
b();
}
});
当我尝试运行此代码时,它显示:
Cannot read property 'listenTo' of undefined
对于功能。但问题是为什么?
据我所知,当一切准备就绪时,会调用 initialization:
get ,这就是为什么另一个监听器在开始时起作用。如果我将监听器放入函数中,它应该是相同的,因为当调用它时,对象已经初始化,因此 this
存在。
知道如何解决这个问题,将监听器留在函数内吗?
提前致谢!
上述问题的解决方案(感谢 sp00m)
-- 新问题--
在对象内实现相同的效果:
var a = Marionette.Object.extend({
b: (function(){
this.listenTo(this, "somethingElse", function(){...});
})()
});
最佳答案
您可以使用var self = this
惯用法:
var a = Marionette.Object.extend({
initialize: function () {
var self = this; // maintain a reference to initialize's this
(function(){
self.listenTo(self, "somethingElse", function(){...});
})();
}
});
更多详细信息:What underlies this JavaScript idiom: var self = this?
关于javascript - Marionette - 在函数或对象中使用listenTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33942722/