javascript - 在 Ember 中创建和更新嵌套对象

标签 javascript ember.js

我像这样从服务器获取了嵌套的 JSON 数据:

{
  name: "Alice",
  profile: {
    something: "abc"
  }
}

我有以下模型:

App.User = Ember.Object.extend({
  name: null,
  profile: Ember.Object.extend({
    something: null
  })
})

如果我简单地执行 App.User.create(attrs)user.setProperties(attrs)profile 对象将被覆盖纯 JS 对象,所以目前我正在这样做:

var profileAttr = attrs.profile;
delete attrs.profile
user.setProperties(attrs); // or user = App.User.create(attrs);
user.get('profile').setProperties(profileAttrs);

它有效,但我在几个地方得到了它,在实际代码中我得到了不止一个嵌套对象,所以我想知道是否可以覆盖 User#createUser#setProperties 方法自动完成。也许有更好的方法?

最佳答案

根据您的评论,您想要模型获得的自动合并行为(您通过 .extend() 获得的那种东西)。在这种情况下,您可以尝试注册一个自定义转换器,例如:

App.ObjectTransform = DS.Transform.extend({
    deserialize: function(json){
        return Ember.Object.create(json);
    }
});
App.User = DS.Model.extend({
    profile: DS.attr('object')
});

参见:https://github.com/emberjs/data/blob/master/TRANSITION.md#json-transforms

关于javascript - 在 Ember 中创建和更新嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21488086/

相关文章:

javascript - 为什么 div 不采用全宽或 100% 宽度?

javascript - 如何避免Javascript事件重复?

Javascript多维数组语法错误

javascript - Ember.js 中的数组操作

javascript - Ember : Prevent transition based on response

javascript - 尝试通过单击旁边的 X 删除多项选择中的每个选项

javascript - 我应该怎么做才能在我的网络应用程序中使用特定字体?

javascript - 触发 Ember 组件中的函数

javascript - Object doesn't support this property or method EmberJs IE 8 问题

javascript - 当数组中的任何项目发生变化时,如何使 Ember 计算属性更新?