2016-10-31 9 views
0

私がしようとしていることは単純だと思われますが、どうやってそれを行うのかよく分かりません。hasManyプロパティに結果が設定されていないときの検出

Emberjs 2.8を使用しています。

私はasync: trueプロパティでは、次のモデルがあります:

models/my-model.js 

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    childModels: DS.hasMany('otherModel', {async: true}) 
}); 

は、私はこれらのモデルのいずれかを表示するコンポーネントがあります。

/components/my-component.js 

import Ember from 'ember'; 
export default Ember.Component.extend({ 
    theModel: // model of type my-model here 
}) 

をそれはmy-model.childModelsは、すべてのレコードを持っていない可能性があります。私がしたいのは、テンプレート表示で「子どもが見つかりません」というメッセージが表示された場合ですが、これを行うだけです。の後にの非同期呼び出しが行われ、空の応答が返されます。

templates/components/my-component.hbs 

<div> 
{{#if theModel.childModels.length == 0}} 
    // display message saying there are no children 
{{else}} 
    {{#each theModel.childModels as |child}} 
     // do something 
    {{/each}} 
{{/if}} 
</div> 

関係はすでにサーバから移入した場合にトリッキーな部分を知っている:だから私は、テンプレートは次のようになりたいと思うだろう。私は.length == 0をチェックするだけでは、非同期呼び出しが行われる前にそれが当てはまり、DOMが不必要に行き来することを望まないためです。私が必要とするのはtheModel.childModels.isLoadedのようなものですが、ドキュメントを調べた後、これをどのように達成するのか分かりません。

誰でもこれを行う方法を提案できますか?アドバイスをいただければ幸いです。どうもありがとう!

+0

'theModel.get( 'childModels')'にアクセスすると、どのようなリクエストを投稿できますか?私が知っている範囲では、あなたはすでにparentModelでIDを提供していたので、あなたはすでにいくつの子供がいるか知っているか、動作しません。 – Keo

+0

@Keoリクエストはそれ自身のエンドポイントにあり、 '/ api/the_model/{pk}/children'のようになります - すべてのレスポンスがidsを必要とするわけではなく、リソースを見つける場所へのリンクになるだけです – TheMethod

+0

ああ、それを指摘していただきありがとうございます。 – Keo

答えて

0

申し訳ありませんので、私は答えを見つけたので、私は愚かな気分になりました。 PromiseManyArrayは、isPendingプロパティを持つPromiseProxyMixinを使用します。サーバーがヒットされていて、空の応答が返されたなら、私に教えてくれます

childModelsEmpty: Ember.computed('theModel.childModels', function() { 
    return !this.get('theModel.childModels.isPending') && this.get('theModel.childModels.length') === 0; 
    }), 

:だから、僕はそうのように計算されたプロパティを作成することができます。

関連する問題