代码之家  ›  专栏  ›  技术社区  ›  Matt

ember输入助手值作为数组

  •  0
  • Matt  · 技术社区  · 10 年前

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

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

    例如,在php之类的软件中,您可以这样做:

    $all_cars = $_POST['cars'];
    

    这将为您提供一个包含所有字段的数组,例如:宝马、捷豹、保时捷。

    在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'));
    

    你怎样才能动态地做到这一点?这样我就能拿到所有的“汽车”场地?正如您所看到的,这个重复的代码应该能够进入for循环,尽管我不确定如何实现?写出10行、20行、30行以上的同名内容会让人感到乏味。

    1 回复  |  直到 10 年前
        1
  •  2
  •   Lux    10 年前

    您应该做的不是直接在数组上循环,而是在保存值的对象数组上循环。

    所以你不会 [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})) .