灰烬 - 动态值绑定

时间:2014-10-23 18:20:18

标签: ember.js

我在Ember应用程序中有一个看似简单的要求,它让我适合。

我想接受这个:

{{view Ember.TextField valueBinding="fields.firstName"}}

并将firstName字段设为变量。这是意图,但显然不起作用:

{{view Ember.TextField valueBinding="fields.{{fieldName}}"}}

我错过了一些明显的东西吗?这似乎应该是一个非常基本的东西,但我已经尝试过10种不同的东西,我认为"应该"工作,但没有一个按预期工作。

4 个答案:

答案 0 :(得分:2)

您必须创建一个计算属性,该属性将侦听fieldName,然后返回值。

例如,请参阅jsbin。这是你想要做的吗?必须记住,Handlebars是非常“愚蠢”的,故意,并且不能像Angular或其他框架那样习惯于进行复杂的计算。控制器应该处理所有这些。

App.IndexController = Ember.Controller.extend({

  fields: {
    field1: 'test',
    field2: 'test2'
  },

  fieldName: '',

  myFieldName: function() {
    var fields = this.get('fields');
    var fieldName = this.get('fieldName');

    return fields[fieldName];

  }.property('fieldName')

});

然后,在您的视图中,绑定到myFieldName。

{{view Ember.TextField valueBinding=myFieldName}}

答案 1 :(得分:2)

您现在可以借助 mut 帮助器将输入值与动态键(变量)绑定

https://guides.emberjs.com/v2.6.0/templates/input-helpers/#toc_binding-dynamic-attribute

 if(condition == true)
{ 
timer = new Timer();
   timer.schedule(new TimerTask(), delay, span);
}
else{
   timer.cancel();
}

检查以下示例

{{view Ember.TextField valueBinding=(mut (get fields fieldName))}}

我们可以像这样绑定输入助手中的键,

var Object = {};
var key = "firstName";

答案 2 :(得分:1)

不要让TextField直接跟踪变量,而是需要TextField跟踪计算属性,并让计算属性跟踪变量。

例如,如果您同时拥有firstNamelastName,则可以执行以下操作...

App.IndexController = Ember.Controller.extend({

  //These are the fields you would want to edit
  firstName: 'Tom',
  lastName: 'Dale',

  //this is so that we can create a selectbox to choose which field to edit
  availableFields: ['firstName', 'lastName'],
  selectedField: 'firstName',

  //This is the computed property which tracks the selected field
  //The text input would be bound to this
  fieldValue: function(key, value){
    var selectedField = this.get('selectedField');
    if (value) {
      this.set(selectedField, value);
    }
    return this.get(selectedField);
  }.property('selectedField')

}); 

您可以在此处查看工作箱:http://emberjs.jsbin.com/juhika/1/edit?html,js,output

答案 3 :(得分:0)

对于动态值绑定,在控制器上创建一个计算属性:

http://emberjs.com/guides/object-model/computed-properties/

另外我认为valueBinding已被弃用。改用值。

这是另一个类似的问题:Ember TextField valueBinding with dynamic property