获取HBS帮手,当越来越嵌套对象

问题描述:

假设我有以下对象:获取HBS帮手,当越来越嵌套对象

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

如果我要得到相应的在我的模板图像的URL,我应该怎么办呢? 我试过了:

{{get image mySize 'url'}} 

但它不起作用。

我可以通过输入这样得到我想要的网址:

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

然而,这是一个非常直观和丑陋的解决方法。有没有更好的方法?谢谢。

+0

您可以编写自己的助手 – kumkanillam

您需要使用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帮助器方法,它的工作原理。计算属性听起来像一个好主意,但我不知道如何在我的模板中有每个循环时使用它。看到这里twiddle:[链接](https://ember-twiddle.com/bd86d0ff403e553fe578932eb7642f97?openFiles=templates.application.hbs%2C) –

+0

啊,如果你循环的项目,你不能使用像这样的计算属性,你必须制作一个组件并将信息传递给该组件,并让它处理url,如果这是你所做的一切,听起来有点矫枉过正。 –

+0

我同意。我不想制作一个组件来处理这样的小事情,一个get-concat组合将完成这项工作。 在我看来,Ember团队应该让帮手接受更多的2个参数,然后每个人都会非常简单直观。 再次感谢您的帮助! –