2014-06-25 60 views
0

我在updateDocumentTitle函數中使用了一個可觀察值,它在完成ajax請求後獲取新值。但我注意到,在可觀察值更改其值後,updateDocumentTitle函數不會再次觸發。在Durandal 2.1.0中設置動態頁面標題

userShell.prototype.router.updateDocumentTitle = function(instance, instruction) { 
    document.title = instance.userArr().name(); 
}; 

我試圖包裝內的計算出的可觀測的updateDocumentTitle的內容,但由於某種原因,當我是相同殼下用戶頁面之間導航(用戶/ 100至用戶/ 105),所計算的可觀察到的被調用盡可能多地瀏覽頁面而不刷新。

是否有其他成功的方法來設置動態文檔標題?

回答

0

這是之間的競爭,當updateDocumentTitle()火災和您的AJAX請求成功完成時。

你的AJAX調用是在哪裏進行的,其中視圖模型的Durandal處理程序?您有activateattachedcompositionComplete處理程序可供選擇。

[編輯]

您需要在這種情況下放棄updateDocumentTitle()。只需在你的viewModel中創建一個observable。在成功完成您的AJAX呼叫後,更新activate處理程序的可觀察值。確保你在視圖中綁定到那個觀察值。實際上,我們自己也是出於同樣的原因需要這樣做。

爲了提高健壯性,請確保在AJAX調用失敗的情況下提供默認標題。

+0

ajax調用在shell的'activate'函數內。無論我把它放在哪裏,響應都會在'updateDocumentTitle'已經觸發後發生。 – Norbert

+0

@Norbert請參閱我的答案中的編輯。 –

+0

我有相同的ajax在page init和':id'上運行。在初始化時,它在'compositionComplete'之前完成,所以Durandal在完成構圖之後覆蓋文檔標題。在':id'變更時,我使用了你的解決方案,它工作。然後,當我試圖找出如何使它在頁面init上工作時,我注意到如果我將'updateDocumentTitle()'留空,Durandal不會在構圖後嘗試更改標題。謝謝您的幫助! – Norbert