我不确定这个问题的正确标题应该是什么。我是 WinJS 新手,有 .NET Webform 和 winclient 背景。
这是我的场景。我有一个导航 WinJS 应用程序。我的结构是:
- 默认.html
- (导航 Controller )
- (设置弹出窗口)
- pages/Home.html
- pages/Page2.html
因此,在 default.js 文件的顶部,它设置了以下变量:
var app = WinJS.Application;
var activation = Windows.ApplicationModel.Activation;
var nav = WinJS.Navigation;
似乎我无法在设置弹出窗口或任何页面中的任何位置使用这些变量:就绪函数。它们的范围仅限于default.js?
同样,互联网上是否有资源(链接)显示如何在我的每个“页面”之间正确共享变量、事件和数据?
我立即需要克服的场景是设置。在我的设置弹出窗口中,我读取并允许用户选择设置以下应用程序设置:
var applicationData = Windows.Storage.ApplicationData.current;
var localSettings = applicationData.localSettings;
localSettings.values["appLocation"] = {string set by the user};
我想在我的 default.js 文件甚至我的导航页面之一中响应该事件,但我不知道在哪里“监听”。我的直觉是监听 afterhide 事件,但是我如何将其范围缩小到我想要监听的页面?
最佳答案
布莱恩.代码福斯特在这里。如果您移动您提到的行...
var app = WinJS.Application;
var activation = Windows.ApplicationModel.Activation;
var nav = WinJS.Navigation;
...在立即函数之外,它们将位于全局范围,并且您可以在任何地方访问它们。这是我在应用程序中做的第一件事。您会听到有关使用全局范围的警告,但人们试图避免的是在全局范围内删除所有内容的模式。只要您控制放入其中的内容,就可以了。
因此将它们放在 default.js 上立即函数的开头之前...
//stuff here is scoped globally
var app = WinJS.Application;
var activation = Windows.ApplicationModel.Activation;
var nav = WinJS.Navigation;
(function () {
//stuff here is scoped to this file only
})();
如果您要保存一些数据并且只需要将其存储在内存中,则可以将其卡在应用程序变量上,而不是将其保存到本地存储中。这将使其可供整个应用程序使用。
//on Page2.js
app.myCustomVariable = "some value";
//on Page3.js
if(app.myCustomVariable == "some value") ...
关于windows-runtime - WinJS 变量/对象范围、设置和事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18066955/