2013-12-11 72 views
0

我正在開發Windows 8.1的HTML/JS應用程序,並且無法調試附加到頂部NavBar對象的處理程序中正在發生的崩潰當用戶從處理程序所附的頁面導航時。WinJS NavBar事件處理程序在導航到另一頁時崩潰Windows 8.1 HTML5/JS應用程序

功能非常簡單:當用戶登錄到問題的屏幕上時,我使用它的.show()方法自動顯示WinJS Flyout。現在,當用戶調用頂層NavBar對象時,我有一個隱藏Flyout對象的處理程序。我還有另一個處理程序,當NavBar被解散時,顯示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處理程序崩潰。有沒有人對如何在導航到新頁面時避免崩潰提出任何建議?

+0

你有沒有試着調試代碼? (進入它?)在崩潰時,看起來像什麼樣的callstack? – WiredPrairie

+0

@WiredPrairie我確實嘗試過。正如我在我的原始文章中所述。該程序在'showFlyout'處理程序的行中崩潰。 callstack指出,在它在該代碼行崩潰之前,它顯示[External Code]。不確定那是什麼意思。 – ariestav

+0

你沒有說明你特別試過的東西。 「調試」是一個非常普遍的術語。你可以加入「演出」功能嗎? – WiredPrairie

回答

1

彈出窗口的顯示方式想要一個元素作爲強制性參數,它是要附加到的元素。

你的情況

你必須找到一個元素,並把它傳遞給你的函數,例如:

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

檢查此頁面瞭解更詳盡的例子:http://msdn.microsoft.com/en-us/library/windows/apps/br211726.aspx

+0

謝謝,但由於用戶已經從具有彈出窗口的屏幕導航,您建議我發送什麼元素? – ariestav

+1

任何元素都會這樣做,但這是強制性的,如果你不這樣做,你會得到一個錯誤。就這麼簡單。 –

相關問題