这是javascript创建的空白应用程序中的默认js文件(default.js)内容:
(function () { "use strict"; WinJS.Binding.optimizeBindingReferences = true; var app = WinJS.Application; var activation = Windows.ApplicationModel.Activation; app.onactivated = function (args) { if (args.detail.kind === activation.ActivationKind.launch) { if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) { // TODO: 此应用程序刚刚启动。在此处初始化 //您的应用程序。 } else { // TODO: 此应用程序已从挂起状态重新激活。 // 在此处恢复应用程序状态。 } args.setPromise(WinJS.UI.processAll()); } }; app.oncheckpoint = function (args) { // TODO: 即将挂起此应用程序。在此处保存 //需要在挂起中保留的任何状态。您可以使用 // WinJS.Application.sessionState 对象,该对象将在 //挂起中自动保存和恢复。如果您需要在 //挂起应用程序之前完成异步操作,请调用 // args.setPromise()。 }; app.start(); })();
这段代码中的"use strict"代表的是开启严格模式,严格模式为代码提供了额外的错误检查。
有两个事件,代表的是应用的生命周期,每个应用都有它的应用生命周期:
onactivated事件表示的正在运行或者激活,这个事件里面是用来注册我们的事件处理程序,就是把初始化的内容和添加事件都写在这里面。
oncheckpoint事件表示的已挂起,这个事件里面就是处理即将挂起应用时会调用的程序。
处理函数写在default.js 中的 app.oncheckpoint 事件处理程序之后、对 app.start 的调用之前。
下面通过一个小例子来学习如何进行事件处理:
我想要实现的效果很简单,就是在文本输入框中输入我的姓名,当我点击按钮的时候,把我的名字显示出来。
首先是html部分的内容:
在default.html页面的body部分加:
<body> 请输入您的姓名:<input type="text" id="userName" /><input type="button" value="按钮" id="btn" /> <div id="con">这里显示您的姓名</div> </body>
现在就是给应用添加事件了,按照应用生命周期的原则:我们把事件绑定写在onactivated里面,这里再说一下,
args.setPromise(WinJS.UI.processAll());
这行代码的意思是初始化应用中的所有控件,我们现在没用到控件,不删留着它就行,添加事件后的代码:
app.onactivated = function (args) { if (args.detail.kind === activation.ActivationKind.launch) { if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) { // TODO: 此应用程序刚刚启动。在此处初始化 //您的应用程序。 } else { // TODO: 此应用程序已从挂起状态重新激活。 // 在此处恢复应用程序状态。 } args.setPromise(WinJS.UI.processAll()); var btn = document.getElementById("btn");//获取按钮 btn.addEventListener("click", btnHendler, false);//为按钮添加处理函数 } };
在onactivated事件里面为按钮注册事件后,就是写处理函数了,按照应用生命周期原则,应该把处理函数写在app.oncheckpoint 事件处理程序之后、对 app.start 的调用之前:
function btnHendler() {//事件处理函数 var userName = document.getElementById("userName").value;//获取文本框里的文本 document.getElementById("con").innerText = userName;//把文本框里的内容添加到con(名字显示区域)里面 }
最后贴出修改后的完整default.js文件:
(function () { "use strict"; WinJS.Binding.optimizeBindingReferences = true; var app = WinJS.Application; var activation = Windows.ApplicationModel.Activation; app.onactivated = function (args) { if (args.detail.kind === activation.ActivationKind.launch) { if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) { // TODO: 此应用程序刚刚启动。在此处初始化 //您的应用程序。 } else { // TODO: 此应用程序已从挂起状态重新激活。 // 在此处恢复应用程序状态。 } args.setPromise(WinJS.UI.processAll()); var btn = document.getElementById("btn");//获取按钮 btn.addEventListener("click", btnHendler, false);//为按钮添加处理函数 } }; app.oncheckpoint = function (args) { // TODO: 即将挂起此应用程序。在此处保存 //需要在挂起中保留的任何状态。您可以使用 // WinJS.Application.sessionState 对象,该对象将在 //挂起中自动保存和恢复。如果您需要在 //挂起应用程序之前完成异步操作,请调用 // args.setPromise()。 }; function btnHendler() {//事件处理函数 var userName = document.getElementById("userName").value;//获取文本框里的文本 document.getElementById("con").innerText = userName;//把文本框里的内容添加到con(名字显示区域)里面 } app.start(); })();
到这里对事件处理的介绍就结束了,在用javascript开发windows8 metro应用中,代码解析因为用的是ie10的内核,所以ie10的事件在应用开发也是一样可以使用的,在ie10中新增加了很多的事件和手势,大家如果有兴趣可以查阅我的另一篇关于ie10事件的文章。