Windows runtime WinJS变量/对象范围、设置和事件?
我不确定这个问题的正确标题应该是什么。我是WinJS新手,来自.NET网络表单和winclient背景 这是我的设想。我有一个导航WinJS应用程序。我的结构是:Windows runtime WinJS变量/对象范围、设置和事件?,windows-runtime,winjs,Windows Runtime,Winjs,我不确定这个问题的正确标题应该是什么。我是WinJS新手,来自.NET网络表单和winclient背景 这是我的设想。我有一个导航WinJS应用程序。我的结构是: default.html (导航控制器) (设置弹出按钮) pages/Home.html pages/Page2.html 因此,在default.js文件的顶部,它设置了以下变量: var app = WinJS.Application; var activation = Windows.ApplicationModel.
- default.html
- (导航控制器)
- (设置弹出按钮)
- pages/Home.html
- pages/Page2.html
var app = WinJS.Application;
var activation = Windows.ApplicationModel.Activation;
var nav = WinJS.Navigation;
似乎我无法在设置弹出按钮或任何页面中的任何位置使用这些变量:ready函数。它们的作用域仅限于default.js
在同样的方面,互联网站(链接)上是否有显示如何在我的每个“页面”之间正确共享变量、事件和数据的资源
我需要立即克服的情况是设置。在“我的设置”弹出按钮中,我读取并允许用户选择设置以下应用程序设置:
var applicationData = Windows.Storage.ApplicationData.current;
var localSettings = applicationData.localSettings;
localSettings.values["appLocation"] = {string set by the user};
我想在default.js文件中或者甚至在导航页面中响应该事件,但我不知道在哪里“侦听”。我的直觉是监听afterhide事件,但如何将其范围返回到我想要监听的页面?当您更改需要实时更新的数据时,请调用
applicationData.signalDataChanged()
。然后在需要获取更改通知的地方,收听applicationData对象上的datachanged
。这也是在计算机之间同步漫游设置时引发的事件
我发现很多时候,即时通知(引发的事件)是不必要的。当需要该值时,我只需再次查询设置(例如在
ready
中)。当您更改需要实时更新的数据时,请调用applicationData.signalDataChanged()
。然后在需要获取更改通知的地方,收听applicationData对象上的datachanged
。这也是在计算机之间同步漫游设置时引发的事件
我发现很多时候,即时通知(引发的事件)是不必要的。我只是在需要值时再次查询设置(例如在
ready
中)。Bryan。我是福斯特。如果你移动你提到的线
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") ...
布莱恩。我是福斯特。如果你移动你提到的线
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") ...
关于您的迫切需要:
datachanged
eventdefault.html
中。通常-此类变量将指向singleton类。例如:我在我的一个应用程序中使用它来存储应用程序后端服务的authclient/serviceclient。这样-多个页面的视图模型不需要创建对象的实例或在WinJS命名空间下引用它WinJS.Namespace.define('Utils.Http',
{
stringifyParameters: function stringifyParameters(parameters)
{
var result = '';
for (var parameterName in parameters)
{
result += encodeURIComponent(parameterName) + '=' + encodeURIComponent(parameters[parameterName]) + '&';
}
if (result.length > 0)
{
result = result.substr(0, result.length - 1);
}
return result;
},
}
WinJS.Class.mix(MyViewModel,
WinJS.Utilities.createEventProperties('customEvent'),
WinJS.UI.DOMEventMixin);
WinJS.Class.mix(MyViewModel,
WinJS.Binding.mixin,
WinJS.Binding.expandProperties({ items: '' }));
initialState
作为页面的事件处理程序的options
参数提供。除非这是应用程序数据或会话状态,否则建议将参数
传递到页面。应用程序数据/会话状态需要单独处理,并且需要单独讨论。应用程序导航历史由winjs库保存;它可以确保如果应用程序在暂停后再次启动,则在导航时,选项将再次传递到页面。最好将options
对象中的属性保持为简单的基本类型addEventListener
注册事件处理程序或在元素上设置事件属性,如onclick
等来实现。事件处理程序通常在页面的ready
事件处理程序中注册WinJS.Namespace.define('Utils.Http',
{
stringifyParameters: function stringifyParameters(parameters)
{
var result = '';
for (var parameterName in parameters)
{
result += encodeURIComponent(parameterName) + '=' + encodeURIComponent(parameters[parameterName]) + '&';
}
if (result.length > 0)
{
result = result.substr(0, result.length - 1);
}
return result;
},
}
WinJS.Class.mix(MyViewModel,
WinJS.Utilities.createEventProperties('customEvent'),
WinJS.UI.DOMEventMixin);
WinJS.Class.mix(MyViewModel,
WinJS.Binding.mixin,
WinJS.Binding.expandProperties({ items: '' }));