emberjs では、テンプレート ファイルにコードを追加できます。
{{input type="text" value=color}}
テンプレートがレンダリングされます。しかし問題は、テンプレートがレンダリングされた後にこれを動的に追加するにはどうすればよいかということです。たとえば、ボタンを追加して新しい入力フィールド (色) を生成したいのですが、ユーザーは必要に応じて新しい色を追加し続けることができますか? これを行うにはどうすればよいでしょうか?
emberjs では、テンプレート ファイルにコードを追加できます。
{{input type="text" value=color}}
テンプレートがレンダリングされます。しかし問題は、テンプレートがレンダリングされた後にこれを動的に追加するにはどうすればよいかということです。たとえば、ボタンを追加して新しい入力フィールド (色) を生成したいのですが、ユーザーは必要に応じて新しい色を追加し続けることができますか? これを行うにはどうすればよいでしょうか?
まず第一に、ユーザーに色の別の入力を追加させたい場合は、何らかのアクションでユーザー入力の値にアクセスしたいと思うでしょう。したがって、その値を格納するバインディングを作成する必要があります。
それらをある種の配列に格納する必要があるとしましょうcolors
。この配列には、最初は 1 つのオブジェクトのみが含まれ、ユーザーがルートに入ると自動的に追加されます。この設定 (例:setupController
ルート内のフック) は次のようになります。
setupController: function(controller, model) {
controller.set("colors", []);
controller.get("colors").pushObject({ value: "" });
}
そして、コントローラのアクションによってボタンのクリックを処理しましょう:
actions: {
handleClick: function() {
this.get("colors").pushObject({ value: "" });
}
}
次に、テンプレートは次のようになります。
{{#each color in colors}}
{{input type="text" value=color.value}}
{{/each}}
メソッドを使用しpushObject
て、バインディングに準拠したプッシュを行います。何かを配列にプッシュするたびcolors
に、テンプレートは自動的に再レンダリングしinput
、適切にバインドされた別のフィールドを挿入します。そのおかげで、他のアクション (送信など) で、ユーザーが提供したすべての値にアクセスして、必要に応じて処理できます。value
color.value