我在Ember应用程序中有一个看似简单的要求,它让我适合。
我想接受这个:
{{view Ember.TextField valueBinding="fields.firstName"}}
并将firstName字段设为变量。这是意图,但显然不起作用:
{{view Ember.TextField valueBinding="fields.{{fieldName}}"}}
我错过了一些明显的东西吗?这似乎应该是一个非常基本的东西,但我已经尝试过10种不同的东西,我认为"应该"工作,但没有一个按预期工作。
答案 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
跟踪计算属性,并让计算属性跟踪变量。
例如,如果您同时拥有firstName
和lastName
,则可以执行以下操作...
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