1

在我的项目中,我们使用的是快照视图,问题是如果我们在 homepage.js 中使用快照视图,它会影响所有页面

 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 函数服务调用。如何避免这种情况,并实现仅在当前页面上。如果此代码中有任何错误,请告诉我。

4

1 回答 1

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
}

哪一个最适合您。onbeforeenavigate 在卸载之前触发,如果这对您很重要。

于 2013-01-28T13:08:19.270 回答