2016-01-20 30 views
2

所以我想弄清楚这是否可以用NativeScript。XML声明中的NativeScript全局事件处理程序?

所以我的理解是要能够在一个XML声明添加事件处理程序,您必须在这样的JavaScript文件中定义的函数(主page.js):

exports.testAlert = function(){ 
    alert('test alert'); 
} 

,我可以再在XML文件中使用(主page.xml):

<Button tap="testAlert" text="testAlert" height="50px" style="font-size:20px;" /> 

的问题是,我不能在另一页全球使用“的testAlert”功能(inside-page.xml)。

起初,我试图与全局对象的工作,并宣布我要成为全球的app.js文件中像这样的功能:

global.testAlert = function(){ 
    alert('test alert'); 
} 

我首先想到的是我可以在访问功能XML像以前一样:

<Button tap="testAlert" text="testAlert" height="50px" style="font-size:20px;" /> 

,没有工作,所以我想也许这样的(global.testAlert):

<Button tap="global.testAlert" text="testAlert" height="50px" style="font-size:20px;" /> 

但为了有我需要在里面,page.js文件重新创建它,或者至少全局函数链接到本地​​一个像这样相同的功能:

exports.testAlert = global.testAlert; 

是否有可以在任何XML页面中使用的单个JS文件中创建事件处理程序?可能保存在app.js文件中?

或者如果所有的全局函数都在它自己的文件中,如global-functions.js然后包含在我需要的地方?

除此之外,我知道你也可以在JS文件中添加事件处理程序。现在我不介意这种方法,如果它能在全球范围内工作?

因此,最终我希望能够创建全局函数和变量,然后我可以在我的应用程序的任何地方使用它。

任何帮助将不胜感激。

回答

1

我目前的解决方案:

所以,我发现周围的工作,现在,它的不理想,但它为我工作。

我首先在应用程序中创建了一个对象(global.toolbox)。JS让我所有的函数和变量:

// This is just a technique I stumbled across to avoid UNDEFINED errors 
// Should be placed at the top of each JS file 
global.toolbox = global.toolbox || {}; 

我定义了全局对象为正常:

global.toolbox = global.toolbox || {}; 
global.toolbox.testFunction = function(){ 
    alert('test alert'); 
} 

然后访问其他网页这些全球性的功能,我需要添加一个小片段“出口”全球功能是通过XML文件访问,这将是主page.js例如:

global.toolbox = global.toolbox || {}; 
for (var k in global.toolbox){ 
    if (global.toolbox.hasOwnProperty(k)) { 
     exports[k] = global.toolbox[k]; 
    } 
} 

我把每个XML文件的每个JS文件的顶部。

现在我能够访问XML文件中的全局函数:

<Button tap="testFunction" text="testFunction" height="50px" style="font-size:20px;" /> 

我还是想看看是否有办法有避免增加代码段给每个JS文件,并进行真正的XML声明的全局函数。

希望这可以帮助别人。