2016-08-09 3 views
0

チームプロパティを初期化するinitialize関数を持つTeamControllerがあります。Mirukenではコントローラの初期化メソッドから約束を返せますか?

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); 
}; 

私は初期化関数からの約束を返す場合は、私のコントローラがバインドするビューでは使用できません。

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

私は、約束が解決されるまでロードを強制するためにinitialize関数から約束を返すことができると思いましたか?

答えて

1

Mirukenは、約束を完全にサポートするIOCコンテナを使用します。コンポーネントがコンテナから解決されると、初期化関数があれば、initialize関数が呼び出されます。 initialize関数が約束を返す場合、要求されたコンポーネントに解決する約束がコンテナから返されます。

残念ながら、AngularとUI-Routerは非同期コンポーネントの解決をサポートしていません。だから、UIは実際に約束したものにバインドしようとしており、解決されたコントローラは ではありません。コードを動作させるには2つのオプションがあります。

  1. UI-Routerを使用しているときに初期化関数から約束を返さないでください。

  2. mirukenのregionディレクティブとViewRegionプロトコルを使用してビューを構成します。リージョンは約束を尊重し、初期化から返された約束が解決されるまでビューをロードするのを待ちます。

関連する問題