骨干.Appcelerator Titanium中的事件上下文问题



我在我的Titanium Mobile (3.1.0 GA SDK)项目中有一个自定义库,看起来像这样:

// 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函数中添加一个事件监听器,它就能正常工作。但是当从对象外部调用时,它将不起作用。

我只会假设这里有一个错误,或者对象是通过值而不是引用传递的,除了这个。如果我将类定义更改为:

// 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函数没有得到正确的上下文,但我也不知道为什么。有人知道是怎么回事吗?

嗯,更新到3.1.1。GA SDK版本修复。肯定是Titanium的bug

最新更新