2016-08-24 27 views
2

を取得するときHBSでヘルパーを取得し、私は次のオブジェクトがあるとします。私は私のテンプレートに画像のURLを対応する取得したい場合は、私はそれをどのように行う必要があり、ネストされたオブジェクト

image: { 
    size: { 
    l: { 
     url: 'l.jpg', 
    }, 
    m: { 
     url: 'm.jpg', 
    }, 
    s; { 
     url: 's.jpg', 
    } 
    } 
}, 
mySize: 'm' 

を? 私は試しました:

{{get image mySize 'url'}} 

しかし、動作しません。

私はこのように入力することで、私が欲しいのURLを取得することができます:

{{get (get image mySize) 'url')}} 

しかし、これは非常に直感的かつ醜い回避策です。もっと良い方法はありますか?ありがとうございました。

{{get image (concat 'size.' mySize '.url')}}

しかし、これは計算されたプロパティのための仕事のように聞こえる:

+0

独自のヘルパー迅速な返信用 – kumkanillam

答えて

1

あなたはそれに伴い、連結ヘルパーを使用する必要が

imageUrl: Ember.computed('mySize', 'image.size', function() { 
    let { image, mySize } = this.getProperties('image', 'mySize'); 
    return Ember.get(image, `size.${mySize}.url`); 
}) 

あなただけで{{imageUrl}}を使用することができますこの方法テンプレート。

Ember twiddle

+0

感謝を書くことができます!私はconcatヘルパーメソッドを使用し、それは動作します。計算されたプロパティは良いアイデアのように聞こえるが、テンプレートに各ループがあるときにどのように使用するのか分からない。 [link](https://ember-twiddle.com/bd86d0ff403e553fe578932eb7642f97?openFiles=templates.application.hbs%2C) –

+0

ああ、あなたがそのような計算されたプロパティを使用することはできませんアイテムをループしている場合は、コンポーネントを作成してそのコンポーネントに情報を渡してURLを処理させる必要があります。これがすべてであれば、ちょっと残酷なように聞こえるかもしれません。 –

+0

私は同意します。私はそのような小さなものを処理するためのコンポーネントを作りたくないので、get-concatコンボがその作業を行います。 私の意見では、Emberチームはgetヘルパーが2つ以上の引数を受け入れるようにしなければならず、誰もが本当にシンプルで直感的になります。 もう一度お世話になりました。 –

関連する問題