2013-06-21 30 views
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函數沒有得到正確的上下文,但我不能爲我的生活找出原因。任何人都能洞察到發生了什麼?

回答

0

嗯,更新到3.1.1.GA SDK版本修復它。一定是Titanium中的一個bug。