在Miruken,我可以从Controller的initialize方法返回一个promise吗?

时间:2016-08-09 02:20:02

标签: javascript angularjs

我有一个TeamController,其初始化函数初始化了team属性。

new function() {
  mlm.package(this, {
    name:    "team",
    imports: "miruken.mvc",
    exports: "TeamController"
  });
  eval(this.imports);
  const TeamController = Controller.extend({
    $properties:{
      teams: []
    },
    initialize() {
      this.base();
      TeamFeature(this.context).getTeams().then(teams => {
         this.teams = teams;
      });      
    }
  });
  eval(this.exports);
};

如果我从initialize函数返回promise,则我的控制器在视图中不可用。

return TeamFeature(this.context).getTeams().then(teams => {
    this.teams = teams;
});    

我以为我可以从initialize函数返回一个promise来强制加载等到promise被解决了?

1 个答案:

答案 0 :(得分:1)

Miruken使用完全支持承诺的IOC容器。从容器中解析组件时,如果它具有初始化函数,则将调用initialize函数。如果initialize函数返回一个promise,那么从解析为所请求组件的容器返回一个promise。

不幸的是,Angular和UI-Router不支持异步组件解析。因此,UI实际上是试图绑定到一个承诺,而不是 解决了控制器要使代码正常工作,您有两个选择。

  1. 使用UI-Router时,不要从初始化函数返回承诺。

  2. 使用miruken的region指令和ViewRegion协议来构建视图。区域遵守承诺,并等待加载视图,直到从初始化返回的承诺得到解决。