2016-08-24 3 views
2

предположить, у меня есть следующие объекты:Получить помощник в HBS при получении вложенных объектов

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

Если я хочу, чтобы получить соответствующий URL изображения в моем шаблоне, как я должен делать это? Я пробовал:

{{get image mySize 'url'}} 

, но он не работает.

я могу получить URL я хочу, набрав, как это:

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

Однако это очень неинтуитивный и уродливый обходной путь. Есть ли лучший способ? Спасибо.

+0

Вы можете написать свой собственный помощник – kumkanillam

ответ

1

Вы должны использовать помощник Concat вместе с ним:

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

Но это звучит как работа для вычисляемого объекта:

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 helper, и он работает. Вычислимое свойство звучит как хорошая идея, но я не знаю, как использовать его, когда у меня есть каждый цикл в моем шаблоне. Смотрите здесь: [link] (https://ember-twiddle.com/bd86d0ff403e553fe578932eb7642f97?openFiles=templates.application.hbs%2C) –

+0

Ах, если вы перебираете элементы, вы не можете использовать вычисленное свойство, подобное этому , вам придется составлять компонент и передавать информацию этому компоненту и обрабатывать URL-адрес, звучит как чересчур избыток, если это все, что вы делаете. –

+0

Согласен. Я не хочу, чтобы компонент обрабатывал такую ​​крошечную вещь, компилятор get-concat выполнит эту работу. На мой взгляд, команда Ember должна заставить хелпера принять более двух аргументов, тогда все будут действительно простыми и интуитивными. Еще раз спасибо за вашу помощь! –