我想创建一个网页与窗体,一旦用户更改任何字段,立即验证和更新提交,而不是让用户点击提交按钮。我正在使用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. KnockoutJS不更新dom - 与Googlemaps api交互
- 4. Knockoutjs立即验证
- 5. Guava Cache即时更新属性更新
- 6. Knockoutjs不更新查看
- 7. KnockoutJS - 当阵列更新
- 8. 更新KnockoutJS associative observableArray值
- 9. PHP即时消息更新
- 10. 与我的后端(PHP)同步我的knockoutjs模型
- 11. knockoutjs可见性刷新已更新
- 12. 终端仍然显示更新版本的rails,即使更新
- 13. 与knockoutjs
- 14. 当dom文本更改时更新knockoutjs视图模型
- 15. 问题与即时运行时的applicationID更新
- 16. Django的更新表后立即保存()
- 17. ListView:即时更新和时间比较
- 18. 在视图模型问题更新后的knockoutjs数据操作
- 19. 如何在更新后立即获取时间戳值?
- 20. KnockoutJS:无法更新选项值
- 21. 在knockoutjs中自主更新显示屏
- 22. KnockoutJS observable未在屏幕上更新
- 23. knockoutjs动画过渡更新元素
- 24. Knockoutjs,取消可观察更新
- 25. knockoutjs,可观察更新彼此
- 26. 如何调用Java GUI的即时更新? (与Thread.sleep()冲突)
- 27. 贝宝与运输总计及即时更新API错误
- 28. hide tag与knockoutjs
- 29. KnockoutJS;绑定值不更新或ko.computed()未更新
- 30. Knockoutjs-创建从属下拉列表,同时更新记录Zend