Ember.js将值绑定到JSon对象

时间:2014-03-23 21:23:43

标签: javascript json ember.js handlebars.js

我正在尝试将输入值绑定到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?如果是,您将如何实现?

谢谢,

3 个答案:

答案 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之间完全同步。