如何将嵌套的普通js对象转换为Ember.js对象?

Rol*_*and 5 javascript ember.js

如果我有一组嵌套的普通旧javascript对象(例如,从JSON返回),我如何将它们导入Ember.js对象(或至少使绑定功能正常工作)?

例如,如果我有一个像这样的对象:

var x = {
  bar: {
    baz: "quux"
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我把它变成一个Ember对象:

var y = Ember.Object.create(x);
Run Code Online (Sandbox Code Playgroud)

然后设置"baz"的值将不会更新我拥有的任何视图,因为它只是一个普通的js对象,而不是Ember对象.

我知道我可以递归地遍历对象键,并一直向下执行Ember.Object.create,但是有另一种方法吗?

ebr*_*ryn 2

我不确定baz在创建 后您如何尝试设置 ,的值Ember.Object,但您应该确保使用观察者感知的设置器函数。对于这个例子,我建议使用setPath().

例如:

var x = {
  bar: {
    baz: "quux"
  }
};
var y = Ember.Object.create(x);
y.setPath('bar.baz', 'foo');
Run Code Online (Sandbox Code Playgroud)

jsFiddle 示例,显示设置后的视图更新:http://jsfiddle.net/ebryn/kv3cU/

  • `set` 现在支持路径。所以不需要使用`setPath`。 (2认同)