我对WinJS.Application.start()
函数的理解是,它允许WinJS排队某些正常的页面初始化事件,使您有机会首先在default.js
文件中设置其他数据。通过调用start()
末尾的default.js
函数,WinJS会为您激活所有排队的事件(例如activated
事件)。
我试图了解生命周期中的所有内容,所以我不清楚为什么下面的第一个例子有效,但第二个没有。我正在做的就是更新页面标题,当我在5秒延迟后拨打app.start()
时,该页面标题无法正常工作:
首先,这里是default.html
:
<html>
<head>
<script references...>
</head>
<body>
<h1 id="pageTitle">Page of coolness...</h1>
</body>
</html>
这是第一个default.js
示例(按预期工作):
(function () {
var app = WinJS.Application;
app.onactivated = function () {
document.getElementById("pageTitle").innerText = "Rock it!";
};
// This code *does* fire the onactivated event:
// The page displays "Rock it!" in the page title
app.start();
})();
这是第二个default.js
示例(不能按预期工作):
(function () {
var app = WinJS.Application;
app.onactivated = function () {
document.getElementById("pageTitle").innerText = "Rock it!";
};
// This code *doesn't* fire the onactivated event:
// It initially displays "Page of coolness..." in the page title.
// After 5 seconds, it adds "Gettin' there...Almost made it..."
// to the the page title, but "Rock it!" never gets displayed
WinJS.Promise.timeout(5000).then(function () {
document.getElementById("pageTitle").innerText += "Gettin' there...";
app.start();
document.getElementById("pageTitle").innerText += "Almost made it...";
});
})();
为什么在5秒延迟后调用app.start()
导致activated
事件无法触发?
答案 0 :(得分:4)
start
功能的文档有点误导。
当您致电start
时,WinJS.Application
开始排队并分派事件,包括Windows.UI.WebUI.WebUIApplication
发出的事件。其中一个事件是activated
,这导致您的处理函数被调用。
重要的一点是,在您致电start
之前,排队才会开始。在排队开始之前WebUIApplication
发出的任何事件都将永远丢失。
这是您通过延迟拨打start
来创建的情况:activated
事件是在WebUIApplication
队列设置之前由WinJS.Application
发送的。 activated
永远不会收到WinJS.Application
事件,因此永远不会调用您的处理函数。
我知道你只是想弄清楚生命周期,但没有理由在现实生活中延迟你对start
功能的调用。获得您尝试在代码中创建效果的唯一方法是将Promise放在onactivated
处理函数中,如下所示:
(function () {
var app = WinJS.Application;
app.onactivated = function () {
document.getElementById("pageTitle").innerText += "Gettin' there...";
WinJS.Promise.timeout(5000).then(function () {
document.getElementById("pageTitle").innerText = "Rock it!";
});
document.getElementById("pageTitle").innerText += "Almost made it...";
};
app.start();
})();