Ember.js (2.5.0) 如何设置嵌套对象的值
Ember.js (2.5.0) how to set nested object value
听起来是一件很简单的事情,但却让我感到很悲伤。
我有一个简单的 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
现在已正确设置,但是名称现在为空,因为我没有在 setProperties 中指定它...
解决这个问题的正确方法是什么?我当然不需要映射出 setProperties 中的所有属性吗?这看起来很浪费而且很容易出错。
我想到的是属性应该只是它自己的模型并且与服务器有关系吗?尽管这始终是一对一和一对一的关系?
在这种情况下,我建议使用 ember-data-model-fragments
插件作为解决方案。
https://github.com/lytics/ember-data-model-fragments
其他选项使用单独的属性模型并设置一对一关系。两者都是 belongsTo
,但它取决于您的数据库和 API,因此您必须调整后端系统以匹配此新结构。
听起来是一件很简单的事情,但却让我感到很悲伤。
我有一个简单的 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
现在已正确设置,但是名称现在为空,因为我没有在 setProperties 中指定它...
解决这个问题的正确方法是什么?我当然不需要映射出 setProperties 中的所有属性吗?这看起来很浪费而且很容易出错。
我想到的是属性应该只是它自己的模型并且与服务器有关系吗?尽管这始终是一对一和一对一的关系?
在这种情况下,我建议使用 ember-data-model-fragments
插件作为解决方案。
https://github.com/lytics/ember-data-model-fragments
其他选项使用单独的属性模型并设置一对一关系。两者都是 belongsTo
,但它取决于您的数据库和 API,因此您必须调整后端系统以匹配此新结构。