2012-10-28 39 views
2

我會說,我明白新的Windows 8應用程序生命週期和它的現在100%由用戶來決定是否要終止應用程序或不前言本。所以,我猜想我正在尋找的是一種僞重新啓動我的應用程序的方式,儘管我對其他建議持開放態度,因爲我對設計Mo​​dern UI應用程序很陌生。軟「重新啓動」 Windows 8應用

我構建與Web 2.0服務,通過OAuth認證需要接口的應用程序。幸運的是,Windows 8的WebAuthenticationBroker使得這個簡單:它顯示,裏面的網頁框架,以允許用戶登錄異步模式窗口,我可以提供一個回調方法,它的完成時。

現在,很明顯,我只希望這顯示登錄屏幕,如果我還沒有儲存在roamingSettings.values用戶會話密鑰。我在Visual Studio中使用了Grid App模板,並且一旦應用程序被激活(檢查roamingStorage,調用WebAuthBroker等),我就會在default.js中執行這些函數。現在,Grid App模板提供了一個data.js來允許我定義一些我想要獲取的REST端點。主要問題是我無法獲取這些REST端點,直到用戶通過身份驗證!但他們仍然必須(至少我認爲)提前在data.js中聲明。所以,我現在正在做的,以避免在用戶未登錄時出現錯誤,如下:

if (roamingSettings.values[sessionKey]){ 
    list = getFeedItems(); // my function that issues all the REST calls 
} else { 
    list = new WinJS.Binding.List(); 
} 

這工作得很好,如果應用程序手動重新啓動後,驗證完成,但我會真的寧願在認證完成後異步完全重新加載應用程序。我已經花了很多時間在這個上,我越來越惱火,因爲我看到其他應用程序這樣做(例如Instametrogram)。

任何想法?

回答

1

要在這裏回答的核心問題,你怎麼了軟啓動:window.location.reload()是你所需要的。這只是刷新到位。

但是,您實際上想要做的是重置ListView實例上的數據源 - 您只需在運行時獲取該控件,然後將數據源重新分配給它。例如:

var lv = document.getElementById("myListView"); 
lv.winControl.itemSource = list; 

這樣的例子也應該在應用程序中,當它將當前的列表分配給列表視圖。

+0

我想'window.refresh()'也可以,但... JavaScript運行時錯誤:對象不支持屬性或方法'refresh''。 此外,你是對的,其他地方的應用程序中的數據源獲取設置,我甚至嘗試了再打電話給那個完全相同的方法都無濟於事。 – chrnola

+0

您的getFeedItems函數是否同步?還是隻在回調後設置其數據?此外,更新我的答案 - 它的window.location.reload –

相關問題