我一直在玩KnockoutJS,絕對喜歡它通過防止東西從裂縫中掉落,從多個角度簡化設計。我的問題是將數據保存回服務器的建議「最佳實踐」是什麼?我的理解是,在連接的MVVM中,第一個「M」是數據層,因此ViewModel觸發器中的依賴關係跟蹤和通知直接保存到數據層。在JavaScript應用程序中,我們斷開連接並使用AJAX有選擇地將其保存回服務器。在MVVM/Knockoutjs Web App中保存更改的最佳方法?
我目前正在使用它的應用程序是MVC3,我完全瞭解如何在控制器上編寫「保存」操作,在我的頁面某處放置「保存」按鈕,將整個ViewModel發佈到保存操作然後將其保存到數據庫。但是當你做一個快速編輯然後再保存它呢?或者如果保存按鈕不符合設計流程呢?相反,您希望每次在表單上進行更改時都不會發布保存按鈕?我反彈的想法是:
- 每次發生任何更改時都會發布整個ViewModel,並使Action瞭解什麼是新的和什麼不是(不理想,特別是對於大型模型,如果沒有否則是因爲每次保存傳輸的數據會不必要地大)。
- 將屬性添加到ViewModel中的每個項目,以跟蹤自上次保存以來是否新建和/或更改。然後,grep這些項目,並只發布到服務器(我沒有測試過,但我認爲這可以通過使用_destroy屬性來完成,就像Rails應用程序所預期的那樣)。
- 將許多較小的視圖模型分離爲合理的視圖模型,以便將前兩個選項中的任何疼痛最小化(這可能無論如何都可以完成)。
- 其他一些更好的方法?
我希望有一些好的想法,我沒有想到。爲了能夠聲明性地綁定所有東西,並且仍然高效地保存會很棒。
你混爲一談MVC(如ASP.NET MVC)和MVVM。它們本質上都是相同的模式,但MVVM具有針對WPF應用程序設計的特定更改。 – Will 2011-04-15 13:02:26
其實KnockoutJS(http://knockoutjs.com)使用MVVM模式,這也是海報所指的。 – 2011-04-15 14:31:04
非常好的問題!沒有Knockout的同一個問題可能會更有用,因爲這只是衆多JS框架中的一個。我會繼續尋找這個問題的答案。 – noocyte 2012-05-04 07:50:49