3

MSDN 文档显示了为 Win8 WinJS 应用程序设置onactivated事件的两个选项:

WinJS.Application.addEventListener("activated", listenerName);

或者

WinJS.Application.onactivated = listenerName;

这两个选项在幕后的行为是否相同,或者有理由使用一种方法而不是另一种方法?

4

2 回答 2

2

这些都是一样的。"onactivated" 是由 WinJS 事件混合助手创建的免费 onFoo 事件。您可以随意使用其中任何一种。

我自己更喜欢 addEventListener 模式。

于 2012-11-28T01:16:20.217 回答
2

这种onactivated风格被称为“DOM Level 0”,因为它在技术上不是 DOM 的一部分,而只是在 DOM 制定之前它演变为工作的方式。该addEventListener方法称为“DOM Level 2”方法。正如多米尼克所说,两者本质上是等价的,但onactivated出于一个原因,我碰巧更喜欢这种风格。我喜欢使用这样的匿名函数......

app.onactivated = function(args) {
    ...
};

但是,如果您使用 DOM Level 2 方法,那么养成使用匿名函数的习惯是个坏主意,因为您没有函数的句柄,因此永远无法删除它。所以如果你这样做...

app.addEventListener("activated", function(args) {
    ...
});

那么您没有该函数的句柄,也无法将其删除。因此,您需要定义一个这样的命名函数......

app.addEventListener("activated", myActivatedFunction);
function myActivatedFunction(args) {
    ...
}

这样,如果您需要删除处理程序,您可以这样做......

app.removeEventListener("activated", myActivatedFunction);

我的codeSHOW 项目的事件处理程序演示中有一个这样的示例。

玩得开心。

于 2012-11-28T01:52:33.497 回答