我在ember应用程序中有一个把手模板。它接受一个数组。我目前声明这个数组
模板:
{{Gd-radio-input content=radioContent value="blue"}}
使用Javascript:
App.IndexController = Em.Controller.extend({
radioContent: [
{label: 'Red', value: 'red'},
{label: 'Blue', value: 'blue'},
{label: 'Green', value: 'green'},
{label: 'Yellow', value: 'yellow'},
]
});
出于我的目的,我想有时在模板中定义数组。
我试过了,但javascrip讨厌我:
{{Gd-radio-input content="[
{label: 'Red', value: 'red'},
{label: 'Blue', value: 'blue'},
{label: 'Green', value: 'green'},
{label: 'Yellow', value: 'yellow'},
]" value="blue"}}
错误:
Assertion failed: The value that #each loops over must be an Array. You passed [
{label: 'Red', value: 'red'},
{label: 'Blue', value: 'blue'},
{label: 'Green', value: 'green'},
{label: 'Yellow', value: 'yellow'},
]
Uncaught TypeError: Object [
{label: 'Red', value: 'red'},
{label: 'Blue', value: 'blue'},
{label: 'Green', value: 'green'},
{label: 'Yellow', value: 'yellow'},
] has no method 'addArrayObserver'
答案 0 :(得分:1)
您可以使用ember g helper arr
生成帮助程序,然后输入以下代码:
{{Gd-radio-input content=(arr
(hash label='Red' value='red')
(hash label='Blue' value='blue')
(hash label='Green' value='green')
(hash label='Yellow' value='yellow')
) value="blue"}}
说明:默认帮助器已经返回参数数组。 hash
助手生成对象。我认为arr
助手应该已经在默认的模板助手BTW。
p.s。:感谢松弛频道上的@locks
答案 1 :(得分:0)
不是javascript讨厌你,它是把手/助手。使用内联string
绑定内容时,它不会将其转换为数组。
您可以添加某种contentString值,将其从字符串转换回数组并将其设置在内容上。
{{Gd-radio-input contentString="[
{label: 'Red', value: 'red'},
{label: 'Blue', value: 'blue'},
{label: 'Green', value: 'green'},
{label: 'Yellow', value: 'yellow'},
]" value="blue"}}
GdRadioInput = Em.Componenet.extend({
watchContentString: function(){
var cs = this.get('contentString');
if(cs){
this.set('content', eval(cs));
}
}.on('init')
});
*注意,我并不是真的推荐使用eval,我只是懒惰。