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 関数が追加されているため、ウィンドウのサイズが変更されたときに onResize 関数が呼び出されないようにする場合は、この関数を削除する必要があります。home.html から離れた場所に移動しても、イベントは接続されたままです。これは、最新の Win8 アプリを含む、SPA スタイルのアプリが機能する方法です。

これを解決するには、次の 2 つの選択肢があります。ナビゲーションが発生する前に処理できます。

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
}

どちらがあなたに最も適していますか。onbeforenavigate は、それが重要な場合にアンロードする前に発生します。

于 2013-01-28T13:08:19.270 に答える