0

很長一段時間,我通過製作全局變量來創建應用程序,這個變量可以通過我加載的模塊訪問。如何從Appcelerator中的commonJS模塊訪問全局值?

var myApp = { 
    windows: {} 
} 

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

myApp.windows.mainWindow.open(); 

通過調用myApp.windows[windowName][functionName]我可以從CommonJS的模塊內操縱其他窗口(例如更新列表)。我也可以關閉,打開其他窗口

我發現從commonJS模塊內調用全局變量並不是很好的做法(並且在從推動中打開應用程序時遇到一些問題)。

如果從commonJS模塊加載窗口內容,訪問其他窗口的最佳方法是什麼?

回答

1

IIRC,您訪問全局的方式可能適用於iOS,但不適用於Android。你是對的,這不是一個好習慣。但是您可以將全局變量存儲在模塊中。

創建一個模塊庫/ 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的模塊窗口,只需使用全局模塊:

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

要小心持有到[R在你認爲你已經關閉並摧毀它們之後,推斷這些窗口。如果在全局模塊中留下對它們的引用,它們將不會被垃圾收集,並且可能會造成內存/資源泄漏。