Ember中HTMLBars Helper的动态绑定属性

时间:2015-03-31 16:56:52

标签: javascript ember.js htmlbars

我有一个属性名称列表attrs我想迭代,创建一个输入,在模型上为每个属性绑定到该属性。下面表达了我所追求的功能:

{{#each attr in attrs}}
  {{input value=model.get(attr) }}
{{/each}}

当然这实际上不起作用,因为你不能在帮助器中进行方法调用。我发现this question,但解决方案在我的Ember版本(1.11.0)中不起作用 - 我收集因为版本1.11.0中的帮助器定义中this未定义(请参阅{ {3}})。

我该如何做到这一点?

1 个答案:

答案 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}}

Here is an Example