Как узнать, что я все еще нахожусь на правильной странице, когда возвращается асинхронный обратный вызов?


person sth    schedule 29.06.2012    source источник


Ответы (2)


Вы можете сравнить URI страницы с текущим WinJS.Navigation.location, чтобы проверить, находитесь ли вы все еще на странице. Для этого вы можете использовать Windows.Foundation.Uri, чтобы получить путь из URI страниц.

WinJS.UI.Pages.define("/showstuff.html", {
    processed: function (element, options) {
        var page = this;

        WinJS.xhr(...).done(function (result) {
            if (new Windows.Foundation.Uri(page.uri).path !== WinJS.Navigation.location)
                return;

            element.querySelector('#target').innerText = result.responseText;
        });
    }
};
person Chris Herring    schedule 01.11.2012

Я не смог найти официальный способ сделать это, поэтому я реализовал обходной путь.

WinJS.Navigation предоставляет события, которые запускаются при навигации. Я использовал событие navigating для создания простого класса, отслеживает просмотры страниц:

var PageViewManager = WinJS.Class.define(
    function () {
        this.current = 0;
        WinJS.Navigation.addEventListener('navigating',
                this._handleNavigating.bind(this));
    }, {
        _handleNavigating: function (eventInfo) {
            this.current++;
        }
    });

Application.pageViews = new PageViewManager();

Класс увеличивает счетчик каждый раз, когда пользователь запускает новую навигацию.

С помощью этого счетчика запрос Ajax может проверить, произошла ли какая-либо навигация, и отреагировать соответствующим образом:

WinJS.UI.Pages.define("/showstuff.html", {
    processed: function (element, options) {
        var pageview = Application.pageViews.current;

        WinJS.xhr(...).done(function (result) {
            if (Application.pageViews.current != pageview)
                return;

            element.querySelector('#target').innerText = result.responseText;
        });
    }
};
person sth    schedule 30.06.2012