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

How to access global value from commonJS module in Appcelerator?

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

var myApp = {
   windows: {}
}

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

myApp.windows.mainWindow.open();

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

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

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

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 模块中引用其中一个 windows 的实例,只需使用 Globals 模块:

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

在您认为已经关闭并销毁它们之后,请小心保留对这些 windows 的引用。如果您在全局模块中保留对它们的引用,它们将不会被垃圾回收,并且您可能会造成 memory/resource 泄漏。