在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多行相同名称会很繁琐。
答案 0 :(得分:2)
你应该做的不是直接在数组上循环,而是在包含值的对象数组上。
所以你不会有[1,2,3]
,而是[{val:1}, {val:2}, {val:3}]
之类的东西。然后,您可以遍历对象并将输入助手绑定到val
:
{{#each cars as |car|}}
{{input value=car.value}}
{{/each}}
这将按预期工作。所以我不确定你从哪里获得这个数组,但是如果你必须使用一个值数组,你可以使用ArrayProxy
和ObjectProxy
来构建更有用的东西。或者您使用观察者将其写回您的结构。但更好的方法是永远不要在ember应用程序中使用值数组,只需将其转换为与API
的连接。我的意思是像cars.map(car => Ember.get(car, 'val')
这样的东西可以为你提供你需要的值数组。而对于另一个方向,您可以carVals.map(val => Ember.Object.create({val}))
。