在Windows Phone 8.1上使用WinJS导航回来时如何恢复枢轴控制selectedIndex?

时间:2014-08-18 23:15:26

标签: pivot windows-phone-8.1 winjs

我正在尝试在用户导航到“详细信息页面”然后返回到数据透视页面后恢复数据透视控件的selectedIndex属性。

我正在捕获selectedIndex并将其存储在pivot pages unload事件的会话状态中。我无法弄清楚的是什么时候恢复价值。

我试过了页面加载事件。我已经验证了该值已被设置,但似乎其他事件稍后会被触发并覆盖它。

我已经尝试检查会话状态变量是否在pivot onselectionchanged和onitemanimationstart事件中设置,但是在其中任何一个中设置会导致应用程序崩溃。对于记录,异常是:0x80020101 - JavaScript运行时错误。由于错误80020101,无法完成操作。

var sessionState = WinJS.Application.sessionState;
var hub = null;

//in the WinJS.UI.Pages.Define call for the pivot item page
ready: function (element, options) {
    hub = element.querySelector(".hub").winControl;

    hub.onselectionchanged = function (args) {
       //crashes app
       if (sessionState.collectionItemSelectedIndex) {
           hub.selectedIndex = sessionState.collectionItemSelectedIndex;
       }

       //code omitted
    }

    //code omitted
},

unload: function () {
    sessionState.collectionItemSelectedIndex = hub.selectedIndex;
    console.log('pivot index: ' + sessionState.collectionItemSelectedIndex);
},

//This does fire, and does set the index, but it seems to be overwritten soon after
load: function (uri) {
    if (sessionState.collectionItemSelectedIndex) {
        hub.selectedIndex = sessionState.collectionItemSelectedIndex;
        console.log('pivot index: ' + sessionState.collectionItemSelectedIndex);
    }

    //taken from base.js
    if (!this.selfhost) {
        return WinJS.UI.Fragments.renderCopy(uri);
    }
},

1 个答案:

答案 0 :(得分:0)

所以我解决了这个问题。

通过在onitemanimationstart事件中设置所选索引并在使用后立即将其设置为null,事情现在正在起作用。

然而,它稍微不理想,因为当您导航回枢轴页面时,您会看到第一个枢轴部分片刻,然后它会动画到您离开的部分。有没有人知道一个更好的方法来做这个,一个不会显示那个短暂时刻的第一部分?