Windows 8 Javascript 应用程序事件侦听器问题
Windows 8 Javascript App Event Listener Issue
所以目前在我的 windows 8 javascript 应用程序(基于导航模板)中,在应用程序启动时导航到主页 (home.html) 从 default.js 初始化点,在 home.html 对应的 home.js 文件中,我正在创建这个手势系统来处理缩放和来回滑动(正确工作):
(function () {
"use strict";
WinJS.UI.Pages.define("/pages/home/home.html", {
// This function is called whenever a user navigates to this page. It
// populates the page elements with the app's data.
processed: function (element, options) {
MyGlobals.loadBooks();
if (!MyGlobals.localSettings.values['firstRunCompleted']) {
MyGlobals.localSettings.values['firstRunCompleted'] = true;
MyGlobals.loadXmlBooksIntoDatabase();
//MyGlobals.integrityCheck();
};
WinJS.Resources.processAll();
},
ready: function (element, options) {
var myGesture = new MSGesture();
var chapterContainer = document.getElementById("main-content-area");
myGesture.target = chapterContainer;
WinJS.Namespace.define("MyGlobals", {
myGesture: myGesture,
});
chapterContainer.addEventListener("MSGestureStart", this.gestureListener, false);
chapterContainer.addEventListener("MSGestureEnd", this.gestureListener, false);
chapterContainer.addEventListener("MSGestureChange", this.gestureListener, false);
chapterContainer.addEventListener("MSInertiaStart", this.gestureListener, false);
chapterContainer.addEventListener("MSGestureTap", this.gestureListener, false);
chapterContainer.addEventListener("MSGestureHold", this.gestureListener, false);
chapterContainer.addEventListener("pointerdown", this.gestureListener, false);
},
gestureListener: function (evt) {
console.log("in gesturelistener now");
if (evt.type == "pointerdown") {
MyGlobals.myGesture.addPointer(evt.pointerId);
return;
}
if (evt.type == "MSGestureStart") {
if (evt.translationX < -3.5) {
MyGlobals.nextChapterHandler();
};
if (evt.translationX > 3.5) {
MyGlobals.previousChapterHandler();
}
};
if (evt.type == "MSGestureChange") {
if (evt.scale < 1) {
MyGlobals.fontSizeModify("decrease");
};
if (evt.scale > 1) {
MyGlobals.fontSizeModify("increase");
}
};
},
问题是,当我使用 WinJS.Navigation.navigate() 导航到另一个页面时,当我使用 WinJS.Navigation.navigate() 导航回 home.html 时,所有上述事件听众不起作用,而且似乎没有被添加到 chapterContainer(来自检查实时 DOM)。但是,ready: 函数中的所有其他事件侦听器都可以正常工作(上面代码中省略了其他侦听器)。我在这里做错了什么吗?
非常感谢!
被导航到的页面也有一个 ID 为 "main-content-area" 的 div,事件侦听器将转到旧页面而不是被导航回的页面。
所以目前在我的 windows 8 javascript 应用程序(基于导航模板)中,在应用程序启动时导航到主页 (home.html) 从 default.js 初始化点,在 home.html 对应的 home.js 文件中,我正在创建这个手势系统来处理缩放和来回滑动(正确工作):
(function () {
"use strict";
WinJS.UI.Pages.define("/pages/home/home.html", {
// This function is called whenever a user navigates to this page. It
// populates the page elements with the app's data.
processed: function (element, options) {
MyGlobals.loadBooks();
if (!MyGlobals.localSettings.values['firstRunCompleted']) {
MyGlobals.localSettings.values['firstRunCompleted'] = true;
MyGlobals.loadXmlBooksIntoDatabase();
//MyGlobals.integrityCheck();
};
WinJS.Resources.processAll();
},
ready: function (element, options) {
var myGesture = new MSGesture();
var chapterContainer = document.getElementById("main-content-area");
myGesture.target = chapterContainer;
WinJS.Namespace.define("MyGlobals", {
myGesture: myGesture,
});
chapterContainer.addEventListener("MSGestureStart", this.gestureListener, false);
chapterContainer.addEventListener("MSGestureEnd", this.gestureListener, false);
chapterContainer.addEventListener("MSGestureChange", this.gestureListener, false);
chapterContainer.addEventListener("MSInertiaStart", this.gestureListener, false);
chapterContainer.addEventListener("MSGestureTap", this.gestureListener, false);
chapterContainer.addEventListener("MSGestureHold", this.gestureListener, false);
chapterContainer.addEventListener("pointerdown", this.gestureListener, false);
},
gestureListener: function (evt) {
console.log("in gesturelistener now");
if (evt.type == "pointerdown") {
MyGlobals.myGesture.addPointer(evt.pointerId);
return;
}
if (evt.type == "MSGestureStart") {
if (evt.translationX < -3.5) {
MyGlobals.nextChapterHandler();
};
if (evt.translationX > 3.5) {
MyGlobals.previousChapterHandler();
}
};
if (evt.type == "MSGestureChange") {
if (evt.scale < 1) {
MyGlobals.fontSizeModify("decrease");
};
if (evt.scale > 1) {
MyGlobals.fontSizeModify("increase");
}
};
},
问题是,当我使用 WinJS.Navigation.navigate() 导航到另一个页面时,当我使用 WinJS.Navigation.navigate() 导航回 home.html 时,所有上述事件听众不起作用,而且似乎没有被添加到 chapterContainer(来自检查实时 DOM)。但是,ready: 函数中的所有其他事件侦听器都可以正常工作(上面代码中省略了其他侦听器)。我在这里做错了什么吗? 非常感谢!
被导航到的页面也有一个 ID 为 "main-content-area" 的 div,事件侦听器将转到旧页面而不是被导航回的页面。