如何从 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 泄漏。
很长一段时间我都是通过创建全局变量来创建应用程序的,这些变量可以通过我加载的模块访问。
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 泄漏。