我有一个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被解决了?
答案 0 :(得分:1)
Miruken使用完全支持承诺的IOC容器。从容器中解析组件时,如果它具有初始化函数,则将调用initialize函数。如果initialize函数返回一个promise,那么从解析为所请求组件的容器返回一个promise。
不幸的是,Angular和UI-Router不支持异步组件解析。因此,UI实际上是试图绑定到一个承诺,而不是 解决了控制器要使代码正常工作,您有两个选择。
使用UI-Router时,不要从初始化函数返回承诺。
使用miruken的region指令和ViewRegion协议来构建视图。区域遵守承诺,并等待加载视图,直到从初始化返回的承诺得到解决。