1

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

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

当然这实际上不起作用,因为您不能在帮助程序中进行方法调用。我发现了这个问题,但该解决方案在我的 Ember 版本(1.11.0)中不起作用——我收集是因为this在版本 1.11.0 的帮助程序定义中未定义(请参见此处)。

我怎样才能使这项工作?

4

1 回答 1

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

这是一个例子

于 2015-03-31T17:49:11.917 回答