我有一个属性名称列表attrs
我想迭代,创建一个输入,在模型上为每个属性绑定到该属性。下面表达了我所追求的功能:
{{#each attr in attrs}}
{{input value=model.get(attr) }}
{{/each}}
当然这实际上不起作用,因为你不能在帮助器中进行方法调用。我发现this question,但解决方案在我的Ember版本(1.11.0)中不起作用 - 我收集因为版本1.11.0中的帮助器定义中this
未定义(请参阅{ {3}})。
我该如何做到这一点?
答案 0 :(得分:1)
如果你想从模型中获取一个属性,以每个循环的当前值命名,你可以编写一个帮助器,如:
Ember.Handlebars.helper('input-helper',
function(model, attr) {
return Ember.get(model, attr);
}
);
然后使用它:
{{#each attr in attrs}}
{{input-helper model attr}}
{{/each}}
这会打印出attr
#each
次迭代中model
所有// component that binds 'object.property' to an input field
var InputBinderComponent = Ember.Component.extend({
prop: null, // passed in
obj: null, // passed in
value: null, // local
onValue: function() {
var obj = this.get('obj');
var prop = this.get('prop');
var value = this.get('value');
Ember.set(obj, prop, value);
}.observes('value'),
});
名称的属性
如果要将该值绑定到输入,而不是创建帮助器,您可以创建一个组件或视图来为您执行此操作:
input-binder
使用{{input type="text" value=value}}
组件的模板实际包含输入:
{{#each attr in attrs}}
{{input-binder prop=attr obj=model}}
{{/each}}
然后在模板中使用它:
{{1}}