2013-05-30 113 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

完蛋了......作品像一个魅力!谢谢! –