簡體   English   中英

創建新模型時存在舊的DS.Model屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM