Appcelerator Titanium中的Backbone.Events上下文问题

时间:2013-06-21 03:16:43

标签: backbone.js titanium-mobile backbone-events

我的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!');
};

不幸的是,永远不会调用log命令。如果我在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函数没有得到正确的上下文,但我不能为我的生活找出原因。任何人都能了解正在发生的事情?

1 个答案:

答案 0 :(得分:0)

嗯,更新到3.1.1.GA SDK版本修复了它。一定是Titanium中的一个错误。