我有一个相当复杂的网页,其中包含各种选项卡、表单、单选按钮、下拉菜单等。所有这些都使用 Knockout.js 绑定到通过 AJAX 调用加载的非常复杂的 JavaScript 对象。当然,用户可以随心所欲地处理内容,此时他们点击“保存”按钮将所有更改保存回服务器。
我正在想出一个好的设计来准确跟踪页面上的更改,以便我可以实现保存。所以,我想出了一些可能的实现。
选项 1) 只需将所有内容发回并让服务器对其进行整理:使用此方法,我会让 Knockout 仅更新数据源。Save按钮将调用并将该.toJS()
数据发送回服务器。 优点:它非常简单,并且在客户端上花费的工作很少。 缺点:服务器并不真正知道发生了什么变化,必须从数据库中加载数据进行比较,或者只是再次保存所有字段。这些字段来自多个表并具有复杂的关系。它还将整个文档视为单个原子单元。如果其他人更改了字段 A 而您更改了字段 B,则一个用户将丢失他们的更改。
选项 2) 使用 JavaScript 比较原始数据和当前数据:使用这种技术,当用户单击保存按钮时,我会系统地比较原始数据和当前数据并生成变化图。 优点:理想情况下,这将导致用户更改的确切内容的紧凑图表,如果没有任何更改,甚至可以无操作。 缺点:我绑定的数据很复杂。它由字符串、数组、对象、对象数组、具有其他对象的对象数组等组成。查找更改将是一个相当复杂的嵌套循环。
选项 3) 在 UI 中进行更改时跟踪更改:我必须在更改发生时观察更改,并在 UI 元素更改时保持增量。如果有任何未决的更改,Save按钮只会将该更改图发送到服务器。 优点:无需比较两个巨大的 JavaScript 对象来寻找更改,但仍然具有选项 2 的所有优点。 缺点: Knockout 似乎没有使用单个事件处理程序来监听所有更改的标准方法。我相信我将不得不求助于绑定到所有 UI 元素,或者bindingHandlers
在 Knockout 中创建自定义来实现这种实时更改跟踪。
我的问题:
我的问题主要是针对 Knockout.js 专家的。是否有解决这种明显常见情况的标准方法或推荐指南?发回所有数据,甚至是未更改的数据,是一种通用设计吗?还是人们正在实施自定义变更跟踪器?Knockout 是否提供任何类型的框架来简化此要求?
更新:找到这个东西,不确定它是否有用或者是否有人对此有任何反馈。