子が埋め込まれた hasMany を持つモデルを使用していました。これは問題なく、 model.get('children') を呼び出すたびにすべてが機能しました。
その children プロパティを async:true に変更しましたが、これを処理する方法に関する適切なドキュメントが見つからないようです。
例を挙げましょう。簡単にするために、簡略化された json を使用して Ember のセットアップを表します。
次のようなモデルがあるとします。
model:{
hasMany: {children: {async: true} },
isActive: boolean
}
次のようなテンプレートがあるとします。
{{#if lastChildIsActive}}
<p>I'm the last one!</p>
{{/if}}
そして、私はControllerを持っています:
controller:{
lastChildIsActive: function(){
return this.get('model').get('children').get('lastObject').get('isActive')
}
}
わかりました、async: false が使用されていたときのこのセットアップでは、すべてがうまくいきました。
しかし今、async が true の場合、.get('children') SOMETIMES のコントローラーでのその呼び出しは、私が推測する非同期であるため、何も返しません。
これで、promise を使用して、コントローラーを次のようにリファクタリングできます。
controller:{
lastChildIsActive: function(){
this.get('model').get('children').then(function(children){
return children.get('lastObject').get('isActive');
});
}
}
2 番目のリファクタリングの問題は、isActive 値を返さなくなり、Promise オブジェクトを返すようになったことです。
しかし、テンプレートは約束を望んでおらず、戻り値が必要です。