2014-10-31 39 views
0

我正面臨着一個非常關鍵的問題,那就是我無法將數據保存到服務器。堅持並拒絕對不同級別關聯的更改 - Extjs 5/Sencha

我正在構建一個儀表板,用戶可以在其中創建新儀表板並自定義現有儀表板。儀表板佈局將包含一行或多行。每行包含一個或多個寬度不同的單元格。每個單元格將擁有一個或多個小部件實例,並在其中包含對特定小部件的引用。所以你有關於另一個表中的小部件的數據。我正在使用表格存儲。

所以我有如下表格。

頁,頁面佈局,行,單元格,CellWidgetInstance 的Widget,WidgetInstance

所以我對所有上述車型表並添加一個商店得到一個特定的頁面佈局。

頁的hasMany頁面佈局

頁面佈局的hasMany行

行的hasMany細胞

細胞的hasMany CellWidgetInstance

CellWidgetInstance HasOne WidgetInstance

WidgetInstance HasOne的widget

因此,我可以使用從商店返回的pageLayout構建頁面的整個視圖或編輯視圖模式。所以我可以訪問Rows集合並繼續下一層。

現在問題出現在我試圖保存更改時。在編輯視圖中,用戶可以添加/刪除行,添加/刪除/更新單元格,添加/刪除WidgetInstances等。 如果用戶希望在完成所有這些更改後單擊取消,它不應該去服務器,我應該能夠拒絕不同層次的所有變化。如果用戶希望保存,我應該能夠保存一個事務中的所有更改。

我希望通過添加所有必要的CUD(創建/更新/刪除)代理到模型,做pageLayoutStore.sync()和pageLayoutStore.rejectChanges()會把每個模型的create/update/delete url每次更改。但是,儘管sencha支持檢索整個層次結構,但它不支持將結構保存爲層次結構。

因此,我現在正在打擊一個主要的障礙,我可以實現我需要的功能,這是大多數情況下非常標準的功能。保存/拒絕模型和相關模型。

我花了幾個小時搜索網絡和sencha論壇,他們說的是sencha仍然不支持保存相關數據。在一個案例中,有一種方法可以在不使用商店的情況下隨時保存模型。但在我的情況下,我不能這樣做,因爲用戶可能會在編輯後取消。

任何人都可以爲此提出解決方法嗎?

非常感謝, 獨山

回答

0

你是絕對正確的 - 煎茶不支持保存嵌套文件。

有幾種解決方法。最簡單的方法是在頂層使用「自動」類型,並放棄模型的剩餘部分。

一個稍微複雜一點的版本是使用自定義編寫器到您的PageLayout類,以便它可以構造手動發送的數據;這將使您完全控制,並允許您將模型保存在PageLayout級別。

也可以擴展模型以允許其他關聯類型 - 我已經爲我當前的項目完成了這個工作,但它有點複雜(並且,目前我無法分享它) 。如果你只有一個「頂級模型」來保存這種嵌套的方式,那麼自定義作家是最簡單的。