Ember.js(2.5.0)如何设置嵌套对象值

Ember.js (2.5.0) how to set nested object value

本文关键字:设置 嵌套 对象 何设置 Ember js      更新时间:2023-09-26

听起来很简单,但却给我带来了各种悲伤。

我有一个简单的server模型,它有一些嵌套的对象,

export default DS.Model.extend({
    type: DS.attr('string'),
    attributes: DS.attr(),
    tasks: DS.attr()
});

我可以使用在路线中创建新记录

export default Ember.Route.extend({
    model() {
        return this.store.createRecord('server');
    },
    actions: {
        create(server) {
            server.save().then(() => this.transitionTo('servers'));
        }
    }
});

在相关的.hbs中,我使用表单中的value=model.attributes.name设置了一些属性和任务的属性。

这一切都很好。然而,我想在create期间从路由中添加更多的属性,例如默认值。

使用server.set('attributes.size', 'large');不起作用,因为Ember还不知道尺寸,因为这是一个新记录。

我可以使用setProperties,但这似乎会消除的所有其他值

server.setProperties({
    attributes: {
        size: "large"
    },
        tasks: {
            create: true
    }
});

size现在已正确设置,但名称现在为null,因为我没有在setProperties中指定它。。。

做这件事的正确方法是什么?我当然不需要映射setProperties中的所有属性吗?这看起来很浪费,而且很容易出错。

我想的是,属性应该只是它自己的模型,并与服务器有关系吗?即使这总是一对一和一对一的关系?

在这种情况下,我建议使用ember-data-model-fragments插件作为解决方案。

https://github.com/lytics/ember-data-model-fragments

使用单独的属性模型并设置1对1关系的其他选项。两者都是belongsTo,但这也取决于您的数据库和API,因此您必须调整后端系统以与此新结构相匹配。