commonjs中的addEventListener

时间:2015-01-21 05:19:07

标签: javascript titanium commonjs

我需要你的帮助。可以说我有2个文件。

文件1

function test(){
   this.view= Ti.UI.createView({
            backgroundColor : 'white'
    });
}
module.exports = test;

和文件2

 var view = Ti.UI.createView();
 var a = require('file1');

 a = new test();
 view.add(a.view);
 //no problem

现在我想将eventListeners添加到视图中。

file2的

 var view = Ti.UI.createView();
 var a = require('file1');
 a=new test();
 view.add(a.view);

 a.view.addEventListener('click',function(){
      a.view.backgroundColor = 'red';
 });

//no problem with this too

但是有没有办法在文件1中添加eventlisteners?像这样的东西

文件1

 function test(){
     this.view = Ti.UI.createView({
           backgroundColor : 'white'
     });

     this.view.addEventListener('click',function(){
              this.view.backgroundColor = 'red';
     });
 }

这样做会给我以下错误

 Uncaught TypeError: Cannot set property 'backgroundColor' of undefined

1 个答案:

答案 0 :(得分:3)

事件侦听器与视图和test函数相关。所以当你这样做时:

this.view.addEventListener('click',function(){
          this.view.backgroundColor = 'red';
 });

您正试图访问backgroundColorview内的this.view

在追加事件之前捕获外部范围,并在执行单击时使用它:

function test(){
     var _this = this;

     this.view = Ti.UI.createView({
         backgroundColor : 'white'
     });

     this.view.addEventListener('click',function(){
         _this.view.backgroundColor = 'red';
     });
 }

这应该为您提供您期望的正确参考。