如何从Appcelerator中的commonJS模块访问全局值?

时间:2017-05-05 13:13:28

标签: titanium appcelerator titanium-mobile appcelerator-titanium appcelerator-mobile

很长一段时间我都是通过制作全局变量来创建应用程序,这个变量可以通过我加载的模块访问。

var myApp = {
   windows: {}
}

myApp.windows.mainWindow = require('libs/pages/mainWindow').create();

myApp.windows.mainWindow.open();

通过调用myApp.windows[windowName][functionName],我可以在commonJS模块中操作其他窗口(例如更新列表)。我也可以关闭,打开其他窗户

我发现从commonJS模块中调用全局变量并不是一种好的做法(并且在推送应用程序时遇到了一些问题)。

如果从commonJS模块加载窗口内容,访问其他窗口的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

IIRC,您访问全局变量的方式可能适用于iOS,但不适用于Android。你是对的,这不是好习惯。但是您可以将全局变量存储在模块中。

创建一个模块libs / Globals.js:

Globals = function () {};

Globals.windows = {};
module.exports = Globals;

现在在你的app.js中,你这样做:

var G = require ('libs/Globals')
G.windows.mainWindow = require('libs/pages/mainWindow').create();

每当你想从另一个CommonJS模块中引用其中一个窗口的实例时,只需使用Globals模块:

var G = require ('libs/Globals')
G.windows.mainWindow.close ();

在您认为关闭并销毁它们之后,请小心保留对这些窗口的引用。如果在全局模块中保留对它们的引用,它们将不会被垃圾收集,并且您可能会创建内存/资源泄漏。