Windows 8 根据app.start()的位置,未激活app.on
我对Windows 8 根据app.start()的位置,未激活app.on,windows-8,winjs,Windows 8,Winjs,我对WinJS.Application.start()函数的理解是,它允许WinJS将某些正常页面初始化事件排队,以便您有机会首先在default.js文件中设置其他数据。通过调用default.js末尾的start()函数,WinJS然后为您触发所有排队的事件(例如激活的事件) 我试图理解生命周期中的每件事都适合哪一个,所以我不清楚为什么下面的第一个例子有效,而第二个则无效。我所做的只是更新页面标题,当我在5秒延迟后调用app.start()时,页面标题无法按预期工作: 首先,这里是defau
WinJS.Application.start()
函数的理解是,它允许WinJS将某些正常页面初始化事件排队,以便您有机会首先在default.js
文件中设置其他数据。通过调用default.js
末尾的start()
函数,WinJS然后为您触发所有排队的事件(例如激活的
事件)
我试图理解生命周期中的每件事都适合哪一个,所以我不清楚为什么下面的第一个例子有效,而第二个则无效。我所做的只是更新页面标题,当我在5秒延迟后调用app.start()
时,页面标题无法按预期工作:
首先,这里是default.html
:
<html>
<head>
<script references...>
</head>
<body>
<h1 id="pageTitle">Page of coolness...</h1>
</body>
</html>
下面是第二个default.js
示例(它没有按预期工作):
为什么在5秒延迟后调用
app.start()
会导致激活的事件不触发?有关start
函数的文档有点误导
调用start
时,WinJS.Application
开始排队和分派事件,包括由Windows.UI.WebUI.WebUIApplication
发出的事件。其中一个事件是激活的
,这将导致调用处理程序函数
重要的一点是,在调用start
之前,队列不会开始。在队列开始之前,WebUIApplication
发出的任何事件都将永远丢失
这是您通过延迟对start
的调用而造成的情况:在设置WinJS.Application
队列之前,activated
事件由WebUIApplication
发送。WinJS.Application
从未收到activated
事件,因此您的处理程序函数从未被调用
我知道您只是想了解生命周期,但在现实生活中没有理由延迟对start
函数的调用。要想在代码中产生效果,唯一的方法是将承诺放在激活的处理函数中,如下所示:
(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();
})();
start
函数的文档有点误导
调用start
时,WinJS.Application
开始排队和分派事件,包括由Windows.UI.WebUI.WebUIApplication
发出的事件。其中一个事件是激活的
,这将导致调用处理程序函数
重要的一点是,在调用start
之前,队列不会开始。在队列开始之前,WebUIApplication
发出的任何事件都将永远丢失
这是您通过延迟对start
的调用而造成的情况:在设置WinJS.Application
队列之前,activated
事件由WebUIApplication
发送。WinJS.Application
从未收到activated
事件,因此您的处理程序函数从未被调用
我知道您只是想了解生命周期,但在现实生活中没有理由延迟对
start
函数的调用。要想在代码中产生效果,唯一的方法是将承诺放在激活的处理函数中,如下所示:
(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();
})();
不是答案,但超负荷会开火。您可以在调试器中遍历base.js,您将看到执行了一个不同的序列。这几乎就像激活的事件处理程序“太晚”被附加一样,所以当它触发时,它还没有被附加并且为null,但无法解释为什么或者这是否是合适的行为。@Jim“这几乎就像激活的事件处理程序“太晚”被附加一样,所以当它触发时,它还没有被附加并且为null…”…事实证明,这正是正在发生的事情,而且它看起来是这样设计的(尽管我不知道为什么)不是答案,但重载确实会开火。您可以在调试器中遍历base.js,您将看到执行了一个不同的序列。这几乎就像激活的事件处理程序“太晚”被附加一样,所以当它触发时,它还没有被附加并且为null,但无法解释为什么或者这是否是合适的行为。@Jim“这几乎就像激活的事件处理程序“太晚”被附加一样,所以当它触发时,它还没有被附加并且为null…”…事实证明,这正是正在发生的事情,从设计上看(尽管我不知道为什么),我最终决定冒险进入
base.js
,这是我一直在犹豫的事情。看起来WinJS.Application
队列确实是在调用start()
之前设置的,但是由于start()
是Windows.UI.WebUI.WebUI.activated
事件的事件处理程序的附加位置,因此该处理程序是对WinJS.Application.activated
事件进行排队的,然后延迟对start()
的调用会阻止处理Windows.UI.WebUI.WebUIApplication.activated
事件(因为它的处理程序在事件触发后被附加,这就发生在default.js
完成之后)。谢谢“在现实生活中,没有理由推迟对start函数的调用”-我最终决定冒险进入base.js
,我一直在犹豫。看起来WinJS.Application
队列确实是在调用start()
之前设置的,但是由于start()
是Windows.UI.WebUI.WebUI.activated
事件的事件处理程序的附加位置,因此该处理程序是对WinJS.Application.activated
事件进行排队的,然后延迟调用start()
pr
(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();
})();