将承诺返回到路径的模型钩子有什么好处?

时间:2013-08-12 12:15:32

标签: ember.js

Ember中Route个对象的一个​​细节是他们接受并处理承诺。但是,我想知道在路由的model挂钩中返回promise的优点是什么,而不是在相应的API请求返回时填充的空记录或记录数组。似乎结果是相似的,但我认为我忽略了某些东西,即优势。

1 个答案:

答案 0 :(得分:12)

由于我是DRY的忠实粉丝,我宁愿引用/提取路由器改版中的full article的重要段落> Alex Matchneer 不久前到了余烬Router然后用我自己的话来解释它。

拥抱异步......

  

为什么?

     
      
  • 应用程序启动的转换和。之间的语义差异   URL启动的转换使得它在某些情况下非常具有挑战性   处理错误或异步逻辑
  •   
  • 基于身份验证的应用程序特别难以实施
  •   当一个promise模型被解决时,有时会调用
  • redirect,   有时不会,取决于应用内/网址转换
  •   
     

解决方案

     

解决方案是拥抱异步并首先进行路由器转换   班级公民。在新的API中,您将获得必要的挂钩   通过传递的Transition对象来防止/修饰转换尝试   到各种钩子。这些钩子是:

     
      每当转换时,
  • willTransition事件就会在当前路由上触发   即将发生。
  •   在异步验证期间,
  • beforeModel/model/afterModel挂钩   相。
  •   

...

  

model和朋友

     

在此路由器迭代中,transitionTo和URL更改的行为方式相同,因为如果模型具有.then属性(表示它是一个属性),则通过transitionTo提供的任何模型或从模型挂钩返回的任何模型都将暂停转换。许)。

由于添加到余烬Router (release RC6),你会在源代码中找到类似下面的代码,恕我直言看起来很漂亮且很容易理解:

来自source

return RSVP.resolve().then(handleAbort)
                     .then(beforeModel)
                     .then(handleAbort)
                     .then(model)
                     .then(handleAbort)
                     .then(afterModel)
                     .then(handleAbort)
                     .then(proceed)
                     .then(null, handleError);

以下是完整文章的link

希望这有帮助。