ember输入辅助值作为数组

时间:2016-05-16 02:45:49

标签: javascript ember.js input

在html表单中,您可以将多个字段串在一起并查看为数组。例如:

<input name="cars[]" value="" />
<input name="cars[]" value="" />
<input name="cars[]" value="" />

因此,例如在像php这样的东西中,你可以这样做:

$all_cars = $_POST['cars'];

这将为您提供包含所有字段的数组,例如:bmw,jaguar,porsche。

在Ember中,等价物类似于:

{{input name="cars[]" value=car0 }}
{{input name="cars[]" value=car1 }}
{{input name="cars[]" value=car2 }}

所以人们可以这样做(我不确定更好的方法):

var cars = [];
cars.push(this.get('car0'));
cars.push(this.get('car1'));
cars.push(this.get('car2'));

你怎么能动态地做到这一点?所以我可以抓住所有的汽车&#39;田地?正如你所看到的,这个重复的代码应该可以进入for循环,虽然我不确定如何?写出10,20,30多行相同名称会很繁琐。

1 个答案:

答案 0 :(得分:2)

你应该做的不是直接在数组上循环,而是在包含值的对象数组上。

所以你不会有[1,2,3],而是[{val:1}, {val:2}, {val:3}]之类的东西。然后,您可以遍历对象并将输入助手绑定到val

{{#each cars as |car|}}
    {{input value=car.value}}
{{/each}}

这将按预期工作。所以我不确定你从哪里获得这个数组,但是如果你必须使用一个值数组,你可以使用ArrayProxyObjectProxy来构建更有用的东西。或者您使用观察者将其写回您的结构。但更好的方法是永远不要在ember应用程序中使用值数组,只需将其转换为与API的连接。我的意思是像cars.map(car => Ember.get(car, 'val')这样的东西可以为你提供你需要的值数组。而对于另一个方向,您可以carVals.map(val => Ember.Object.create({val}))