Ember 无法绑定到数组索引,因此您必须解决它。一种解决方案是将自己限制为单向绑定,您的文本字段会更新值哈希。如果您打算在用户按下按钮后提交表单,这应该可以解决问题。
在你的控制器中定义一个字段 id 的数组,并为它们的值定义一个哈希值。
App.ApplicationController = Ember.Controller.extend({
fieldIds: ['name', 'email', 'whatever'],
fieldValues: {} // {name: 'user', email: 'user@...', ...}
});
现在扩展Ember.TextField
以在文本字段更改时更新您的值哈希。您需要从控制器传递每个实例 a 和对哈希fieldId
的引用。values
App.TextField = Ember.TextField.extend({
fieldId: null,
values: null,
valueChange: function() {
var fieldId = this.get('fieldId');
var values = this.get('values');
if (values && fieldId) values[fieldId] = this.get('value');
}.observes('value')
});
模板很简单。
{{#each fieldId in fieldIds}}
<label>{{fieldId}}</label>
{{view App.TextField fieldIdBinding="fieldId" valuesBinding="fieldValues"}}
<br/>
{{/each}}
在这里,它在 jsfiddle 中得到了充实。