Mik*_*sen 6 javascript ajax json knockout.js
我有一个相当复杂的网页,其中包含各种标签,表单,单选按钮,下拉菜单等.它们都使用Knockout.js绑定到通过AJAX调用加载的非常复杂的JavaScript对象.当然,用户可以根据自己的内容捣乱内容,此时他们点击" 保存"按钮将所有更改保留回服务器.
我正在设计一个好的设计,以准确跟踪页面上的更改内容,以便实现保存.所以,我想出了一些可能的实现.
选项1)只需将所有内容发回并让服务器对其进行排序:使用此方法,我会让Knockout更新数据源." 保存"按钮将调用.toJS()该数据并将其发送回服务器. 优点:它非常简单,在客户端上只需要很少的工作. 缺点:服务器并不真正知道更改了什么,必须从数据库加载数据进行比较,或者只是再次保存所有字段.这些字段来自多个表,并且具有复杂的关系.它还将整个文档视为单个原子单元.如果其他人更改了字段A并且您更改了字段B,则一个用户将丢失其更改.
选项2)使用JavaScript比较原始数据和当前数据:使用此技术,当用户单击" 保存"按钮时,我会系统地比较原始数据和当前数据并生成更改图表. 优点:理想情况下,这会产生一个紧凑的图表,确切地说明了用户的变化,如果没有任何改变,甚至可以没有操作. 缺点:我绑定的数据很复杂.它由字符串,数组,对象,对象数组,与其他对象的对象数组等组成.寻找更改将是一个相当复杂的嵌套循环.
选项3)跟踪在UI中进行的更改:我必须在发生更改时观察更改,并在UI元素更改时保留增量.如果有任何挂起的更改," 保存"按钮只会将该更改图发送到服务器. 优点:无需比较寻找改变两个巨大的JavaScript对象,但仍然有选项2的所有优点 缺点:淘汰赛没有出现有一个标准的方式来听使用一个单一的事件处理程序的所有变化.我相信我不得不求助于绑定到所有UI元素,或者bindingHandlers在Knockout中创建自定义来实现这种实时更改跟踪.
我的问题:
我的问题主要针对Knockout.js专家.是否有标准方法或建议的指导方针来解决这种明显常见的情况?发回所有数据,甚至是没有改变的东西,一个常见的设计?或者是人们实施自定义更改跟踪器?Knockout是否提供了满足此要求的任何类型的框架?
更新:找到这个东西,不确定它是否有用或者是否有人对此有任何反馈.
如果是启用/禁用“保存”按钮、允许用户“从”该页面/状态导航的问题,那么您可以检查https://github.com/CodeSeven/kolite
检查knockout.dirtyFlag.js
希望这可以帮助。
编辑:请记住,您“永远”不应该信任来自“UI”的数据。真正的比较和验证最终会在服务器内的“受控”环境中进行。
| 归档时间: |
|
| 查看次数: |
1100 次 |
| 最近记录: |