2016-05-16 13 views
-1

html形式では、複数のフィールドをまとめて文字列として配列として見ることができます。たとえば:配列として入力ヘルパーの値を入力します

あなたの例のフィールドの全ての配列を、与える
$all_cars = $_POST['cars']; 

:BMW、ジャガー、ポルシェ、PHPのようなもので

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

ですから、例えば、あなたはこれを行うことができます。 (私はより良い方法のわからないんだけど)1は、この操作を行うことができるように

{{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行以上を書くのは面倒です。

+0

'car0、car1、car2'の計算値を配列に入れることはできませんでしたか? – m0meni

+0

50フィールドの場合は、50までのcar0、car1、car2、car3などを手動で書く必要があります。 – Matt

+0

まず、配列に配置するのではなく、50個の別々のフィールドがあるのはなぜですか?もしあなたが50を持っていなければならない場合は、配列 '['car1'、 'car2'、 'car3']'に ' Ember.computed(... cars、function(){}) ' – m0meni

答えて

1

あなたがすべきことは、配列を直接ループするのではなく、値を保持するオブジェクトの配列を渡すことです。

[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}))を実行することができます。

+0

これは私が探していたものです。ありがとうございます。 – Matt

関連する問題