0
我在二中移動(3.1.0 GA SDK)的項目有一個自定義庫,它看起來是這樣的:Backbone.Events方面的問題
// lib/MyObject.js
function MyObject
{
var self = this;
_.extend(self, Backbone.Events);
this.trigger('myEvent');
}
module.exports = MyObject;
在我的應用程序的另一部分,我做該類全球上市:
Alloy.Globals.MyObject = require('MyObject');
並在控制器,我實例吧:
var myObj = new Alloy.Globals.MyObject();
這個對象被張望了一下過去了,直到最後添加一個事件偵聽器:
// In another controller
myObj.on('myEvent', function() {
console.log('My event happened!');
};
遺憾的是,登錄命令不會被調用。如果我在MyObject函數中添加事件偵聽器,它可以正常工作。但從對象外部調用它不起作用。
我只是假設那裏有一個bug,或者對象被值而不是引用傳遞,除此之外。如果我將類定義更改爲以下內容:
// lib/MyObject.js
function MyObject
{
var self = this;
_.extend(self, Backbone.Events);
var old_on = this.on;
this.on = function(a, b, c) {
return old_on.call(self, a, b, c);
};
this.trigger('myEvent');
}
module.exports = MyObject;
...一切正常。不知何故on
函數沒有得到正確的上下文,但我不能爲我的生活找出原因。任何人都能洞察到發生了什麼?