2013-05-30 112 views
6
基於

我迪朗達爾SPA時迪朗達爾閃屏使得在的ViewModels的激活功能,各種異步Ajax調用。我正在使用激活功能中的Q返回一個承諾。與承諾工作

function activate(){ 
     return Q.fcall(['getPersons', 'getAgenda']); 
} 

function getPersons(){ 
     var defer = Q.defer(); 
     $.ajax({ 
     //omitting most of the settings 
     success: function(data){ 
       defer.resolve(data); 
     }, 
     error: function(xhr, status){ 
       defer.reject(status); 
     } 
     }); 

    return defer.promise; 
} 

getAgenda函數也存在類似的代碼。所有這一切工作正常,並在我的屏幕轉換。麻煩的是,我的getAgenda需要一段時間(2〜3秒)。閃屏沒有出現,畫面保持它是爲2或3秒過渡之前。

我的啓動畫面簡單,確實顯示了第一次的現場負載。有任何想法嗎?

回答

4

假設你的啓動畫面看起來與http://durandaljs.com/documentation/Adding-a-Splash-Screen相似,那麼這意味着一次性閃屏在app.start中被覆蓋。

<div id="applicationHost"> 
    <div class="splash"> 
     <div class="message"> 
      Durandal Starter Kit 
     </div> 
     <i class="icon-spinner icon-2x icon-spin active"></i> 
    </div> 
</div> 

您可能正在尋找某種加載指示器。 E.g樣品中這是基於router.isNavigating實現的,所以在你的VM創建similiar isLoading觀察到的,你做的時候異步調用前和爲false設置爲true。

https://github.com/dFiddle/dFiddle-1.2/blob/gh-pages/App/samples/shell.html#L13

<div class="loader pull-right" data-bind="css: { active: router.isNavigating }"> 
    <i class="icon-spinner icon-2x icon-spin"></i> 
</div> 
+0

完蛋了......作品像一個魅力!謝謝! –