2016-02-13 105 views
1

在我的應用程序中,一個模型中的數據本質上是「元」,並定義了另一個模型中的屬性。想象一下,檢索數據庫,其中列定義數據確定每行的屬性。如何重新初始化一個餘燼數據模型

我可以reopen()行模式,只要我還沒有從商店請求行。隨後調用store.findAll('row')將檢索具有所有已定義屬性的數據。

但是,如果我已經在Column.reopen()之前調用store.findAll('row'),那麼我找不到一種方法使商店確認新的屬性。

我曾嘗試沒有成功:

  • 卸載所有的行,並再次找到他們
  • 呼籲行peekAll /更新已經在店裏
  • 該行模型調用Ember.defineProperty(),而不是重新打開。

現有的和後續的新行都沒有得到新的屬性。

+0

這不是燼數據的工作方式。它的強類型。可以使用'name'和'value'作爲屬性的'field'模型。 – Lux

+0

感謝您的想法。我懷疑它會擴展,即使我可以用'hasMany'來加載一個事務。 Ember對我的應用來說已經太慢了。如果我的問題真的沒有答案(除了「不這樣做」),我認爲我的最佳選擇是將動態屬性串化爲單個字符串屬性,並將它們處理爲ember-data之外,或者拋出ember-數據。 –

+0

也許更好的方式來問我的問題:我可以重新初始化整個商店,但寧願只是(重新)初始化單個模型。 –

回答

1

爲我的作品的解決方案是:

let store = this.get('store'); 

    Ember.getOwner(store).unregister('model:item'); 
    Item.reopen(newAttributes); 
    Ember.getOwner(store).register('model:item', Item); 

    let currentRoute = this.get('currentRoute'); 
    if (currentRoute) { 
    currentRoute.refresh(); 
    } 

我註冊與更新架構服務的路線。當檢測到模式更改(我爲防止抖動而發生的脫機)時,我註銷模型,重新打開並重新註冊,重新註冊並刷新路由。可能有辦法讓商店在不刷新路線的情況下反映這些更改,但我無法找到它。