windows-runtime - WinJS 变量/对象范围、设置和事件?

标签 windows-runtime winjs

我不确定这个问题的正确标题应该是什么。我是 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/

相关文章:

video - WinJS 视频元素中的 HTTP 字幕

cordova - 通过 URI 加载存储在 LocalState 文件夹中的图像文件

XamlParseException 无法分配给属性。绑定(bind)不适用于附加属性

c++ - Windows 8 下 Metro 风格应用程序的类似 Fraps 功能

windows-8 - Windows应用商店应用(Windows 8)与UWP

javascript - 扩展 WinJS Promise 对象

c# - Package.Appxmanifest - 有什么方法可以在代码中获取此部分吗?

windows-runtime - 在 Windows 应用商店应用程序上实现带下划线的超链接的最佳方法?

windows-8 - Windows 8 商店 appId 受哪些规则管辖?它们在版本/重命名中是否持久?