【问题标题】:Ember.js (2.5.0) how to set nested object valueEmber.js (2.5.0) 如何设置嵌套对象值
【发布时间】:2016-05-15 01:22:31
【问题描述】:

听起来很简单的事情却让我感到各种悲伤。

我有一个简单的 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 中的所有属性吗?这似乎很浪费,而且很容易出错。

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

【问题讨论】:

    标签: javascript ember.js ember-data


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 2020-11-02
      • 2021-02-21
      • 2020-03-28
      • 1970-01-01
      相关资源
      最近更新 更多