导航到另一个页面时,WinJS NavBar事件处理程序崩溃Windows 8.1 HTML5 / JS应用程序

时间:2013-12-11 18:38:12

标签: windows-8 winjs windows-8.1

我正在开发一个适用于Windows 8.1的HTML / JS应用程序,当用户从附加处理程序的页面导航时,无法调试连接到顶部NavBar对象的处理程序中发生的崩溃。

功能非常简单:当用户登陆屏幕时,我会使用它的.show()方法自动显示WinJS Flyout。现在,当用户调用顶部NavBar对象时,我有一个隐藏Flyout对象的处理程序。当NavBar被解雇时,我还有另一个处理程序.shows()Flyout。

用户导航到其他页面时会出现问题。这是我的问题屏幕的代码:

var appBar = class.that.constructs.NavBar;

ready : function (element, options) {

    var self = this;

    ...

    appBar.topControl.onbeforeshow = self.hideFlyout;
    appBar.topControl.onbeforehide = self.showFlyout;

    $('#flyout').addClass('activated');
    $('#flyout')[0].winControl._sticky = true;
    $('#flyout')[0].winControl.show();

},
hideFlyout: function() {

    $('#flyout').topControl.winControl.hide();
},
showFlyout: function() {
    $('#flyout').topControl.winControl.show();
},
unload: function () {
    appBar.topControl.onbeforeshow = null;
    appBar.topControl.onaftershow = null;
}

正如您所看到的,我在卸载页面时删除了事件处理程序,但这似乎并没有成功。我仍然遇到这个崩溃错误:

 JavaScript runtime error: Unable to get property 'classList' of undefined or null reference

它在showFlyout处理程序上崩溃了。在导航到新页面时,有没有人建议如何避免崩溃?

1 个答案:

答案 0 :(得分:1)

弹出窗口的show方法想要一个元素作为必需参数,它是将被附加到的元素。

在您的情况下,您必须找到一个元素并将其传递给您的函数,例如:

var myButton= document.getElementById("myButton");
$('#flyout').topControl.winControl.show(myButton);

请查看此页面以获取更广泛的示例:http://msdn.microsoft.com/en-us/library/windows/apps/br211726.aspx