[英]Old DS.Model properties are present when creating a new model
我有一個帶有一些嵌套鍵的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"
您遇到的問題是由於model.config
在所有模型實例之間共享,因為它是在擴展時間而不是在每個模型實例的創建時間創建的。 這是一個JavaScript概念,請參閱此SO答案以獲取更多信息。
您希望每個模型都具有自己的config
實例:
config: DS.attr({
defaultValue() {
return {
url: '',
connections: 5,
request_timeout: 2000,
//etc...
};
}
})
另外,要記住的一件事是,由於config
是POJO,因此如果您嘗試基於config
屬性創建觀察者或計算屬性,則將沒有綁定。
我建議使用以下替代方法之一:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.