Javascript 创建新模型时会出现旧的DS.Model属性
我有一个带有一些嵌套键的Javascript 创建新模型时会出现旧的DS.Model属性,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我有一个带有一些嵌套键的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,
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...
}
})
...
})
以及创建传递到表单的模型的新路径:
export default Ember.Route.extend({
model() {
return this.store.createRecord('resource');
},
...
通过/resource/new
上的表单创建新模型后,重新访问表单时,config
仍设置为上次创建模型的值
我可以从中看出该模型是一个不同的实例(在离开初始创建页面之前存储了对oldModel
的引用):
oldModel.toString()
""
oldModel.get('config.url')
"http://localhost:4000/old"
新型号=$E
newModel.toString()
""
newModel.get('config.url')
"http://localhost:4000/old"
您遇到的问题是由于model.config
在所有模型实例之间共享,因为它是在扩展时创建的,而不是在每个模型实例的创建时创建的。这是一个JavaScript概念,有关更多信息,请参阅
您希望每个模型都有自己的config
实例:
config: DS.attr({
defaultValue() {
return {
url: '',
connections: 5,
request_timeout: 2000,
//etc...
};
}
})
另外,需要记住的一件事是,由于config
是一个POJO,如果您试图基于config
中的属性创建观察者或计算属性,那么您将没有绑定
我建议使用以下备选方案之一:
- 嵌入模型(每个配置都需要一个唯一的id--uuid)
config: DS.attr({
defaultValue() {
return {
url: '',
connections: 5,
request_timeout: 2000,
//etc...
};
}
})