在我的项目中,我们使用快照视图,问题是如果我们在主页中使用快照视图。它会影响所有页面
window.addEventListener("resize", onResize,false);
此代码调用我们捕捉的所有页面。
(function () {
"use strict";
var pageName = "homePage";
WinJS.UI.Pages.define("/pages/home/home.html", {
ready: function (element, options) {
window.addEventListener("resize", onResize,false);
}
function onResize() {
var pageName = "homePage";
if (Windows.UI.ViewManagement.ApplicationView.value == Windows.UI.ViewManagement.ApplicationViewState.fullScreenLandscape) {
var UsrName = localStorage.getItem("username");
var parameters = "'strUserName':'" + UsrName + "'";
ServiceCall("GetAllDeals", parameters, pageName);
var UsrName = localStorage.getItem("username");
var UId = localStorage.getItem("UserID");
var parameters = "'strUserName':'" + UsrName + "','UserID':'" + UId + "'";
ServiceCall("TrackDeals", parameters, pageName);
}
}
这是我们在主页中使用的代码,但是当我们在其他页面如trackpage.js时,当我们捕捉该页面并取消隐藏时,我们将返回homepage.js onResize函数服务call.how以避免这种情况,并且仅在当前页面上实现。请告诉我此代码中是否有任何错误。
答案 0 :(得分:2)
因为onResize函数已添加到窗口对象中,所以如果您不希望在窗口更改大小时调用它,则必须将其删除。即使你可以离开home.html,事件仍然是连接的。这就是SPA风格的应用程序的工作方式,包括现代的Win8应用程序。
要解决此问题,您有两个选择,您可以在导航发生之前处理它:
WinJS.Navigation.onbeforenavigate = function () { window.removeEventListener('resize', onresize);};
或者您可以使用WinJS页面卸载功能来处理它:
WinJS.UI.Pages.define("/pages/home/home.html", {
unload: function() {window.removeEventListener('resize', onresize);},
// rest of Page code, including Ready goes here
}
哪一个最适合你。如果这对您来说非常重要,请在卸载前进行火灾。