- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个相当复杂的网页,其中包含各种选项卡、表单、单选按钮、下拉菜单等。所有这些都使用 Knockout.js 绑定(bind)到通过 AJAX 调用加载的非常复杂的 JavaScript 对象。当然,用户可以随心所欲地处理内容,这时他们可以点击保存按钮将所有更改保存回服务器。
我正在想出一个好的设计来准确跟踪页面上的更改,以便我可以实现保存。因此,我提出了一些可能的实现方案。
选项 1) 只需将所有内容发回并让服务器进行整理:使用此方法,我会让 Knockout 仅更新数据源。 Save 按钮将调用 .toJS()
并将该数据发送回服务器。 优点:它非常简单,客户端只需做很少的工作。 缺点: 服务器并不知道发生了什么变化,必须从数据库中加载数据进行比较,或者再次保存所有字段。这些字段来自多个表并且具有复杂的关系。它还将整个文档视为单个原子单元。如果其他人更改了字段 A 而你更改了字段 B,则一个用户将丢失他们的更改。
选项 2)使用 JavaScript 比较原始数据和当前数据:使用这种技术,当用户点击保存按钮时,我会系统地比较原始数据和当前数据并生成变化图。 优点:理想情况下,这会生成一个准确显示用户更改内容的紧凑图表,如果没有任何更改,甚至可以不进行任何操作。 缺点:我绑定(bind)的数据很复杂。它由字符串、数组、对象、对象数组、对象数组和其他对象等组成。寻找变化将是一个相当复杂的嵌套循环。
选项 3)在 UI 中进行更改时跟踪更改:我必须在更改发生时观察更改,并在 UI 元素更改时保持增量。如果服务器有任何未决更改,保存 按钮只会将该更改图发送到服务器。 优点:无需比较两个巨大的 JavaScript 对象来寻找变化,但仍然具有选项 2 的所有优点。缺点:不会出现 knockout em> 有一个标准的方法来使用一个事件处理程序来监听所有的变化。我相信我将不得不求助于绑定(bind)到所有 UI 元素,或者在 Knockout 中创建自定义 bindingHandlers
来实现这种实时更改跟踪。
我的问题:
我的问题主要针对 Knockout.js 专家。是否有标准方法或推荐指南来解决这种明显常见的情况?发回所有数据,甚至是没有改变的东西,是一种通用设计吗?或者人们正在实现自定义更改跟踪器? Knockout 是否提供任何类型的框架来简化此要求?
更新:找到this thing ,不确定它是否有用,或者是否有人对此有任何反馈。
最佳答案
如果这是启用/禁用“保存”按钮的问题,允许用户“从”该页面/状态导航,那么您可以检查 https://github.com/CodeSeven/kolite
检查 knockout.dirtyFlag.js
希望这对您有所帮助。
编辑:请记住,您“永远不要”信任来自“用户界面”的数据。真正的比较和验证,最终会在服务器内的“受控”环境中进行。
关于javascript - 是否有使用 Knockout 绑定(bind)页面进行更改跟踪的标准方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14946236/
我不知道该怎么做... function f1() { var x = 10; function f2(fx) { var x; x = 6;
早期绑定(bind)和后期绑定(bind)有什么区别? 最佳答案 简短的回答是,早期(或静态)绑定(bind)是指编译时绑定(bind),后期(或动态)绑定(bind)是指运行时绑定(bind)(例如
如何在 SwiftUI View 上使用 Binding(get: { }, set: { }) 自定义绑定(bind)与 @Binding 属性。我已成功使用此自定义绑定(bind)与 @State
我经常发现自己遇到问题,即控件的两个(相关)值被更新,并且两者都会触发昂贵的操作,或者控件可能会暂时处于不一致的状态。 例如,考虑一个数据绑定(bind),其中两个值 (x,y) 相互减去,最终结果用
我想通过我的 ViewModel 控制我的一个窗口的高度和宽度。 这看起来很简单。 但没有。它不起作用。 它检查 ViewModel 的 Width但不是 Height . 奇怪的是,如果我切换 W
UI5中一次性绑定(bind)和单向绑定(bind)有什么区别? 是否有任何用户特定的用例我会使用它们? 我无法从文档中获得太多信息。 最佳答案 单程 它的作用:单向数据流。模型数据的变化(例如通过
(define make (lambda (x) (lambda (y) (cons x (list y))))) (let ((x 7) (p (make 4))) (cons
尽管我或多或少地了解什么是语言绑定(bind),但我很难理解它们是如何工作的。 例如,谁能解释一下如何为 WinAPI 制作 Java 绑定(bind)? 最佳答案 如果您搜索 Foreign Fun
谁能解释为什么我可以重新绑定(bind)列表但不能+? (binding [list vector] (list 1 3)) (binding [list +] (list 1 3)) (bi
我真的很喜欢 Caliburn 和命名约定绑定(bind),我很惊讶 可见性与“CanNAME”约定用于保护 Action 的方式不同。 据我所知, BooleanToVisibilityConver
我了解动态绑定(bind)的实现方式以及静态绑定(bind)和动态绑定(bind)之间的区别,但我只是无法理解动态绑定(bind)的定义。基本上它是一种运行时绑定(bind)类型。 最佳答案 基本上,
http://jsfiddle.net/3NRsd/ var foo = $("div").bind("click", function() { $("div").animate({"hei
这个问题我快疯了...我有一个用户控件,它有一个用于插入操作的 FormView 和一个用于所有其他操作的 GridView。 在这两个控件中,我都有一个 DropDownList,如下所示: '
我有一个绑定(bind)到 ListBox 的地址的 ObservableCollection。然后在 ItemTemplate 中,我使用 {Binding .} 绑定(bind)到当前地址记录。这
如果我有以下简单的 js/knockout 代码: .js( View 模型): var image = ko.observable('http://placehold.it/300x150'); 看
我正在 aurelia 上开发一个自定义属性,让用户在输入文本区域时从列表中进行选择。例如,用法将是这样的: 正如您可能注意到的,auto-complete是属性。现在,当我想显示提示时,我想在自定
我正在使用 EventEmitter2作为我的应用程序内部的消息总线。现在我需要绑定(bind)和取消绑定(bind)一些事件处理程序。因为我也希望他们bind将它们添加到给定的上下文中,我最终得到以
我有以下函数调用: $(".selector").on("click", callback.bind(this, param1, param2)); 在我的回调函数中,我想使用绑定(bind)的 th
我目前正在试验新的编译绑定(bind),并且(再次)达到了我在拼图中遗漏了一个小问题:为什么我必须调用 Bindings.Update?直到现在,我还认为实现 INotifyPropertyChang
我正在阅读一本关于编写 JavaScript 框架的书,并找到了这段代码。但是我不明白它是如何工作的,尤其是 bind.bind 的用法?有人知道吗? var bind = Function.prot
我是一名优秀的程序员,十分优秀!