我是新來的knockout.js。幾分鐘後,我讀了ko的標題特徵。 我無法理解的是ko真的MVVVM?因爲他們所談論的只是數據綁定以及它的易用性。但我相信MVVM不僅僅是數據綁定?knockout.js真的採用MVVM模式嗎?
回答
是的,knockout.js的確應用了MVVM模式。 It's explained in the documentation:
一個模式:應用程序的存儲的數據。這些數據代表您的業務領域中的對象和操作(例如,可以執行匯款的銀行賬戶),並且獨立於任何用戶界面。使用KO時,通常會對某些服務器端代碼進行Ajax調用,以讀取和寫入此存儲的模型數據。
A 查看模型:在UI上的數據和操作的純代碼表示。例如,如果你正在實現一個列表編輯器,你的視圖模型將是一個擁有項目列表的對象,並且展示添加和移除項目的方法。
請注意,這不是UI本身:它沒有任何按鈕或顯示樣式的概念。它不是保存的數據模型 - 它保存用戶正在使用的未保存的數據。在使用KO時,您的視圖模型是純粹的JavaScript對象,不掌握HTML。以這種方式保持視圖模型的抽象可以讓它保持簡單,所以你可以在不迷路的情況下管理更復雜的行爲。
甲視圖:表示視圖模型的狀態的可見,交互式用戶界面。它顯示來自視圖模型的信息,向視圖模型發送命令(例如,當用戶單擊按鈕時),並且在視圖模型的狀態改變時更新。
當使用KO時,您的視圖就是您的HTML文檔,它帶有聲明式綁定以將其鏈接到視圖模型。或者,您可以使用使用視圖模型中的數據生成HTML的模板。
除了已經給出了答案,有幾件事情要記住 -
MVVM
淘汰賽是MVVM因爲它支持關注點分離效果好。與其他JavaScript庫(如jQuery)不同,它的目標是不污染與其無關的視圖。
view model
的目的很重要。它不會嘗試操作DOM,因爲只有將視圖中的數據提供給其視圖的邏輯才放在其中。
view
的目的只是爲了呈現(渲染)數據。沒有邏輯,驗證或其他邏輯代碼在這裏。
model
是Knockout可能會有點棘手的唯一地方。在您的項目中添加一個單獨的model
以供使用,但是許多開發人員已經發現將model
混合到view model
中很容易。原因很明顯(一些model
是非常基本的),但這只是出於易於實施。
MVC VS MV *
當然也有對SO.com是試圖回答什麼是MV*
其他的答案,但我希望把我的$ 0.02這裏 - 其他庫或框架說話的事實,他們是MVC
或MVP
或MV(whatever)
的基礎,但Knockout是我發現的唯一一個實踐它在這方面宣揚的東西。如果你有時間和期望看看Angular或Ember等其他框架的結構,並且你會看到存在一條模糊的線條,或多或少它們只是使用基於MVVM
的模式,但將其稱爲不同的模式。
嗯,我想它可以,但是我正在一個項目中,所有樣式和用戶界面佈局操作都是在淘汰js ViewModel文件中完成的,這不是一個好的做法。
- 1. MVVM真的有用嗎?
- 2. 模式是MVVM中的反模式嗎?
- 3. 我真的需要MVVM嗎?
- 4. 使用MVVM模式
- 5. 使用MVVM模式的
- 6. ASP.NET MVVM模式
- 7. MVVM模式javascript
- 8. MVVM備用事件模式
- 9. 同時使用MVVM模式
- 10. 麻煩應用MVVM模式
- 11. 這個輕量級模式真的是輕量級模式嗎?
- 12. MVVM模式的模板形式
- 13. MVVM模式查詢
- 14. MVVM模式和startActivity
- 15. MVVM模式書籍?
- 16. 採用三種模式
- 17. MVVM模式下的Viewpager
- 18. MVVM模式的疑問?
- 19. ASP.NET Webforms的MVVM模式?
- 20. MVVM模式中的TypeInitializeException
- 21. WPF MVVM模式的ObservableCollection
- 22. silverlight4 MVVM如何editi上採用兩種形式的
- 23. 服務堆棧的DTO模式真的有用嗎?
- 24. Sencha Touch可以像KnockoutJS一樣使用MVVM模式嗎?
- 25. 使用MVVM模式的Asp .NET Web API
- 26. WPVM應用程序的MVVM模式?
- 27. 問題Implelemting MVVM模式的應用
- 28. 使用MVVM模式的動畫
- 29. 修改從它的外部knockout.js模式
- 30. 我們可以在MVVM模式的UI層使用域模型嗎
MVVM的模型可以在服務器端(即C#類),它的視圖模型可以在JavaScript中嗎?數據將使用AJAX查詢,而C#類具有以JSON形式出現的屬性,或者整個類被序列化爲JSON。因爲我看到的實現是這樣做的。這是對的嗎? –
是的,這很常見。 [映射插件](http://knockoutjs.com/documentation/plugins-mapping.html)將幫助您創建或更新基於您的服務器端模型的ViewModel。 – sroes