听起来像一个简单的事情,却让我感到各种各样的悲伤。
我有一个简单的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中映射出所有属性吗?这似乎很浪费,非常容易出错。
我认为属性应该是属于自己的模型并与服务器有关系吗?即使这始终是1对1和1对1的关系?
答案 0 :(得分:0)
在这种情况下,我建议使用ember-data-model-fragments
插件作为解决方案。
https://github.com/lytics/ember-data-model-fragments
使用单独的属性模型并设置1对1关系的其他选项。两者都是belongsTo
,但它也取决于您的数据库和API,因此您必须调整后端系统以匹配此新结构。