我有一个带有嵌套键的DS.Model
:
export default DS.Model.extend({
name: DS.attr('string'),
slug: DS.attr('string'),
status: DS.attr('string'),
config: DS.attr('', {
defaultValue: {
url: '',
connections: 5,
request_timeout: 2000,
etc...
}
})
...
})
创建用于传递给表单的模型的new
路由:
export default Ember.Route.extend({
model() {
return this.store.createRecord('resource');
},
...
通过/resource/new
上的表单创建新模型后,在重新访问表单时,config
仍设置为上次创建的模型的值。
我可以通过Ember Inspector看到模型是一个不同的实例(在初始创建页面之前存储了对oldModel
的引用):
oldModel.toString()
"<web@model:app::ember731:null>"
oldModel.get('config.url')
"http://localhost:4000/old"
newModel = $E
newModel.toString()
"<web@model:app::ember894:null>"
newModel.get('config.url')
"http://localhost:4000/old"
答案 0 :(得分:0)
您遇到的问题是由于model.config
在所有模型实例之间共享,因为它是在扩展时创建的,而不是在每个模型实例的创建时创建的。这是一个JavaScript概念,有关详细信息,请参阅this SO answer。
您希望每个模型拥有自己的config
实例:
config: DS.attr({
defaultValue() {
return {
url: '',
connections: 5,
request_timeout: 2000,
//etc...
};
}
})
另外,要记住的一件事是,由于config
是POJO,如果您尝试根据config
中的属性创建观察者或计算属性,则不会具有绑定。
我建议使用以下替代方案之一: