我正在尝试将输入值绑定到JSon对象,但我找不到让它工作的方法。
以下是我的对象示例。
Data = {
value = "test"
};
和我的App.FIXTURES
App.FIXTURES = [
{
title : "What is your age?",
linkedTo : Data.value
}
];
我的模板:
{{#each questions}}
{{title}}
{{input type="text" valueBinding=linkedTo}}
{{/each}}
绑定只能以一种方式工作,它会检索要显示的值,但是当我尝试访问Data.value
字段时,它永远不会改变。
有可能这样做吗?我尝试了几种方法却没有成功。我是否必须延长Ember.Textfield
?如果是,您将如何实现?
谢谢,
答案 0 :(得分:1)
Javascript字符串是不可变的。您实际上是将值"test"
复制到linkedTo
而不是将其链接到Data.value
答案 1 :(得分:1)
即使kingpin2k是真的,我也有一个建议,以防你仍想要实现这种功能。因此,请尝试使用其键更改的对象而不是实际的字符串值。
我的意思是,不是使用实际的字符串来绑定,而是使用对象并绑定到属性。因此,不是直接使用Data.value
字符串值,而是使用Data.value
作为对象,其中键actualValue
将保存字符串的值。现在,ember可以设置它的魔法来绑定到这个属性并更改值。
因此,当您想要获取Data.value
字符串值时,请转到绑定到Data.value.actualValue
的{{1}}
所以你的代码会变成:
linkedTo.actualValue
在模板中:
var Data = {
value: {
actualValue: 'test'
}
};
App.FIXTURES = [
{key: 'red', linkedTo: Data.value}
];
你将获得价值:
{{input type="text" valueBinding=linkedTo.actualValue}}
以下是我尝试解释emberjs jsbin
的内容的演示答案 2 :(得分:0)
感谢tavi,我想到了解决问题的新想法。
我创建了一个新的自定义视图,扩展了Ember.TextField
:
App.CustomTextField = Em.TextField.extend({
keyUp:function(event){
console.log(this.get('value'));
//Watch input for Security code injection!!
eval(linkedto + ' = this.get(\'value\')');
}
});
所以每次我更新它的值都会在我的textfield和json之间完全同步。