动态生成基于对象阵列的组件
问题描述:
好的,我对Ember(和框架)很新颖,所以如果我遗漏了一些明显的东西,请原谅我。动态生成基于对象阵列的组件
我有一个包含一些逻辑的设置菜单组件。该逻辑的一部分是一个返回对象数组(可能的设置)的计算属性。它将该数据传递给视图组件。
菜单component.js
possibleSettings: computed(function() {
// Example of returned data
return [
{
type: 'time',
min: 1,
max: 60,
},
},
type: 'sound',
values: [‘alarm’, ‘beep’, ‘rooster’],
},
]
});
菜单component.hbs
{{menu-component/menu-view
possibleSettings=possibleSettings}}
每个设置都有它自己的组件,例如:
菜单组分/time.hbs
<label>Time</label>
{{input value=time}}
菜单组分/ sound.hbs
<label>Sound</label>
{{dropdown items=sounds}}
我想要的视图分量来呈现这些组件,基于possibleSettings的结果。因此,按照上面的示例数据,它需要同时呈现时间和声音组件。
我想我需要这样的东西,但我无法将头围绕在最后一点。我可以用新的眼光看待事物。
菜单组件/设置 - view.hbs
<div>
{{#each possibleSettings as |setting|}}
{{#if (eq setting.type time)}}
{{component ‘menu-component/time'}}
{{else if (eq setting.type sound)}}
{{component ‘menu-component/sound'}}
{{/if}}
{{/each}}
</div>
任何帮助深表感谢。
答
看来问题在于你没有在你的把手中引用time
引号,所以它在组件本身上寻找一个名为time
的属性,而不是字符串"time"
。另外,我不认为你需要在这里使用组件助手,因为你无论如何都在硬编码组件名称。这里是你的哈佛商学院在这方面的编辑
<div>
{{#each possibleSettings as |setting|}}
{{#if (eq setting.type "time")}}
{{menu-component/time}}
{{else if (eq setting.type "sound")}}
{{menu-component/sound}}
{{/if}}
{{/each}}
</div>
或者,你可以做这样的事情:
{{#each possibleSettings as |setting|}}
{{component (concat 'menu-component/' setting.type)}}
{{/each}}
我完全忘了CONCAT,这就是我试图实现的解决方案。同时,我的计算属性名称中有一个错字,这就是为什么我花了两个小时试图弄清为什么我无法访问object.keys .... d'oh!干杯。 –