我想創建一個網頁與窗體,一旦用戶更改任何字段,立即驗證和更新提交,而不是讓用戶點擊提交按鈕。我正在使用Knockout.js和映射插件。我知道我可以通過爲每個原始字段創建一個計算字段來實現此目的,但是這種工作是枯燥乏味的,是否有很好的做法來創建一個通用偵聽器來偵聽任何字段中的任何更改並分別更新後端?即時更新後端與Knockoutjs
2
A
回答
5
爲了訂閱任何更改,您可以使用ko.toJS()方法。實際上它允許遍歷對象圖和展開可觀察對象。正如您在使用ko.computed時可能知道的那樣,它會訂閱所有觀察值字段的讀取內容,並在每次更改時重新評估。所以,如果你使用這樣的代碼:
ko.computed(function() {
ko.toJS(viewModel);
// update data on server
});
你也應該注意這一段代碼將初始化之後更新服務器數據。它可以很容易地避免。請結帳這個例子:http://jsfiddle.net/UAxXa/embedded/result/
另外我想你可能只想發送更改的數據到服務器。你可以合併ko.editbales插件(https://github.com/romanych/ko.editables)和一些KO引擎蓋知識。請結帳此示例:http://jsfiddle.net/romanych/RKn5k/
我希望它可以幫助你。
0
你有幾個選擇,但如果你想要一個單一的監聽器,一個好方法是使用我用來創建一個更改跟蹤器的相同代碼。它只是傾聽可觀察到的變化。它大約有19行代碼。您可以抓住它,而不是將其用於更改跟蹤,只需連接一種方法即可在發生更改時保存更改。
- 的NuGet http://nuget.org/packages/Knockout.ChangeTracker
- Codeplex上http://kochangetracker.codeplex.com/
要設置更改跟蹤,這種跟蹤器屬性添加到您的視圖模型:
viewModel.tracker = new ChangeTracker(viewModel);
鉤到這些視圖,以確定在發生變化時:
viewModel.tracker().somethingHasChanged();
鉤到您的視圖模型時您希望在功能復位狀態(例如:加載,保存):
viewModel.tracker().markCurrentStateAsClean;
或者,你可以通過你自己的狀態跟蹤散列函數了。
相關問題
- 1. KnockoutJS貨幣綁定與實時更新
- 2. 更新Knockoutjs表
- 3. Wordpress前端「更新」按鈕與後端更新按鈕相同
- 4. knockoutjs在編輯後更新了表格
- 5. KnockoutJS不更新dom - 與Googlemaps api交互
- 6. knockoutjs沒有更新
- 7. angularjs即時更新
- 8. 即時瞭解後端如何與前端配合工作
- 9. KnockoutJS與KnockoutJS
- 10. 即時更新Java TextArea更新
- 11. Guava Cache即時更新屬性更新
- 12. Knockoutjs立即驗證
- 13. KnockoutJS - 當陣列更新
- 14. Knockoutjs MULTISELECT沒有更新
- 15. KnockOutJs對象不更新UI
- 16. KnockoutJS更新行和場
- 17. Knockoutjs不更新查看
- 18. KnockoutJS不更新視圖
- 19. knockoutjs我應該更新
- 20. 如何查看knockoutjs更新?
- 21. PHP即時消息更新
- 22. 即時更新jQuery功能
- 23. Silverlight中的即時更新
- 24. 非即時更新模型?
- 25. 計算出的Knockoutjs在更新後不會重新計算
- 26. 與我的後端(PHP)同步我的knockoutjs模型
- 27. 終端仍然顯示更新版本的rails,即使更新
- 28. knockoutjs可見性刷新已更新
- 29. 問題與即時運行時的applicationID更新
- 30. 當dom文本更改時更新knockoutjs視圖模型