2017-08-16 11 views
0

次のように私は現在、計算された別名を含むモデルを持って次のようにEmber.js:コンポーネントのJavaScriptから計算された別名にアクセス

model: DS.belongsTo('device-model'), 
manufacturerName: Ember.computed.alias('model.manufacturer.name') 

私はそれから呼び出されるコンポーネントを持っている:

{{my-component model=model}} 

コンポーネントのハンドルバーテンプレートでは、{{model.manufacturerName}}で計算されたプロパティに簡単にアクセスできますが、my-component.jsでは問題なく動作しています。私は試しました:

console.log(this.get('model').get('manufacturerName')) 

ただし、出力はundefinedです。これまでのところ、私は私の-component.jsからメーカー名を取得することができる唯一の方法は次のとおりです。

this.get('model').get('model') 
.then((model) =>{ 
    return model.get('manufacturer') 
}) 
.then((manufacturer) => { 
    console.log(manufacturer.get('name')) 
}) 

だから、私はハンドルテンプレートは、私はそのjavascriptの対応で行うことができないことをやっていることを思ったんだけど? Handlebarsのテンプレートは約束通りですが、コンポーネントのjavascriptについては手作業で行う必要があります。

ありがとうございました!

答えて

-1

私は問題があなたのbelongsTo関係のためだと思います。 Emberのリレーションシップのデフォルト値は{async:true}です。実際にリクエストしたときにのみ、関連するエンティティを取得します。これはあなたのモデルがロードされていないことを意味します。これは、manufacturerNameがmodel.manufacturerName.nameのエイリアスであるためロードされていないことを意味します。

+0

フィードバックいただきありがとうございます。私はあなたが何を意味するのか理解していますが、なぜ、Handlebarsテンプレートはそのプロパティにアクセスできますが、そのjavascriptの対応はできないのですか?コンポーネントのjavascriptで何を追加する必要がありますか? – finferflu

+0

これは奇妙なことですが、私はこれまでに遭遇したことはありません。彼らはすべて働いているか、どちらも働いていません。私はあなたのコンソールログが何かのモデル 'デバイスモデル'をロードする前に起こると思う。 hbs内の{{model.manufacturerName}}がリフレッシュされるか、後に読み込まれます。私はちょうどthis.store.findAll( 'デバイスモデル')のようなコンポーネントを呼び出す前に、あなたのビューのルートに 'device-model'をロードしようとします。 – feiiiiii

+0

私はすでに私のビューのルートでそれをやっています。それ。 – finferflu

関連する問題