3

對於Javascript中的單個和多個執行上下文,我感到非常困惑。 我提到這個http://developer.appcelerator.com/blog/2010/08/execution-contexts.html 雖然我有一個很好的JS上下文的概述。 但我不知道什麼時候在Titanium中構建應用程序時使用單個或多個上下文是很好的。JavaScript(Titanium)中的單個執行上下文和多個執行上下文之間的區別

+0

不能明確發表評論,鈦,但在瀏覽器中,每個窗口和框架有其自己的全球執行上下文存在類似的情況(鏈接的文章,說有一個單一的全球範圍內的時候是不正確整個瀏覽器應用程序,它是每個窗口或框架)。子窗口必須在父窗口中引用全局變量作爲「opener.varName」,因爲不合格的「varName」將在子範圍內解析,而不是在父級範圍內解析。 – RobG 2012-07-26 06:51:40

回答

3

Best Practices Documentation(重點煤礦):

鈦手機,就可以創建一個設置爲路徑,以JavaScript文件(相對於當前文件)一個url屬性的窗口。當窗口的open方法被調用時,關聯的JavaScript文件被評估,創建一個輔助的「執行上下文」,從而創建一個新的範圍。除少數情況外,應該避免使用這種多重活動的JavaScript環境。

這些多個執行上下文會導致問題,因爲沒有範圍有 知名度任何其他的,這意味着上下文之間共享數據 不可能沒有笨拙使用的應用程序級的定製 事件(使用Titanium.App的addEventListener和fireEvent) 。他們可以通過 也導致循環引用和可能的內存泄漏。 也存在 生命週期問題,在此情況下,已經評估給定JavaScript文件的 的代碼變得不清楚。

雖然有一些合理的使用情況這種做法,如 的,每一個新的窗口,需要一個「乾淨的石板」 與全球範圍內沒有依賴性,通常使用URL窗口「的應用程序內的應用程序」不應使用 。

+1

感謝Adam,你如何避免多個JS環境。如果窗口需要打開,它將是..關於該 – 2012-07-31 06:14:36

+0

的任何提示主要的事情是在創建窗口時不使用url屬性。相反,請使用CommonJS模塊化方法,如[this](https://github.com/appcelerator-developer-relations/Template.SingleWindow/blob/master/Resources/ui/handheld/ApplicationWindow.js)。 Android在執行上下文或[重量級窗口](https://wiki.appcelerator.org/display/guides/Android+Module+Development+Guide#AndroidModuleDevelopmentGuide-HeavyWeightandLightweightWindows)上有其他要考慮的事項,這也在帖子中討論過你在問題中鏈接到。 – 2012-07-31 17:47:48

+0

因此,您的意思是使用commonJS方法打開窗口將在相同的上下文(環境)中打開該窗口。 – 2012-08-02 09:32:11

相關問題