Javascript 使用Knockoutjs即时更新后端

Javascript 使用Knockoutjs即时更新后端,javascript,web,knockout.js,Javascript,Web,Knockout.js,我试图创建一个带有表单的网页,一旦用户更改任何字段,验证和更新将立即提交,而不是让用户单击提交按钮。我正在使用Knockout.js和映射插件。我知道我可以通过为每个原始字段创建一个计算字段来实现这一点,但这类工作是tedius和dumb做的,有没有好的做法来创建一个通用侦听器来侦听任何字段中的任何更改并分别更新后端?为了订阅任何更改,可以使用ko.toJS()方法。实际上,它允许遍历对象图并展开观察对象。正如您可能知道的,当您使用ko.computed时,它订阅所有可观察字段的读取,并在每次更

我试图创建一个带有表单的网页,一旦用户更改任何字段,验证和更新将立即提交,而不是让用户单击提交按钮。我正在使用Knockout.js和映射插件。我知道我可以通过为每个原始字段创建一个计算字段来实现这一点,但这类工作是tedius和dumb做的,有没有好的做法来创建一个通用侦听器来侦听任何字段中的任何更改并分别更新后端?

为了订阅任何更改,可以使用ko.toJS()方法。实际上,它允许遍历对象图并展开观察对象。正如您可能知道的,当您使用ko.computed时,它订阅所有可观察字段的读取,并在每次更改时重新计算。因此,如果您使用这样的代码:

ko.computed(function() {
   ko.toJS(viewModel);
   // update data on server
});
您还应该注意,这段代码将在初始化之后立即更新服务器上的数据。这是很容易避免的。请检查此示例:

另外,我认为您可能只想将更改后的数据发送到服务器。您可以合并ko.editbales插件()和一些ko-underhood知识。请检查此样本:


我希望它能帮助你

您有几个选项,但是如果您想要一个侦听器,一个好方法是使用我用来创建更改跟踪器的相同代码。它只是监听可观察到的变化。大约有19行代码。您可以抓住它,而不是使用它进行更改跟踪,只需插入一个方法,在更改发生时保存更改

  • 努吉
  • 码丛
若要设置更改跟踪,请将此跟踪器属性添加到视图模型中:

viewModel.tracker = new ChangeTracker(viewModel); 
将这些链接到视图中以确定何时发生更改:

viewModel.tracker().somethingHasChanged(); 
当您想在函数中重置状态(例如:加载、保存)时,将其挂接到视图模型中:

或者,您也可以传递自己的hashFunction进行状态跟踪

viewModel.tracker().markCurrentStateAsClean;