我正在尝试创建一个带有表单的网页,该网页一旦用户更改任何字段,验证和更新提交立即提交,而不是让用户单击“提交”按钮。我正在使用quotout.js和映射插件。我知道我可以通过为每个原始字段创建一个计算的字段来实现这一目标,但是这种工作是Tedius和Dumb,是否有良好的做法来创建一般听众以分别聆听任何字段中的任何更改并分别更新后端?

有帮助吗?

解决方案

为了订阅任何更改,您可以使用ko.tojs()方法。实际上,它允许浏览对象图并解开可观测值。正如您可能知道的那样,当您使用ko.com时,它订阅了所有可观察到的字段的读物,并重新评估每个更改。因此,如果您使用这样的代码:

ko.computed(function() {
   ko.toJS(viewModel);
   // update data on server
});

另外,您应该注意此代码将在初始化后立即更新服务器上的数据。可以轻松避免。请检查此示例: http://jsfiddle.net/uaxxa/embedded/result/

另外,我认为您可能只想将更改的数据发送到服务器。您可以合并ko.editbales插件( https://github.com/romanych/ko.editubles )和一些KO的知识。请检查此示例: http://jsfiddle.net/romanych/rkn5k/

我希望它可以帮助您。

其他提示

您有几个选择,但是如果您想要一个侦听器,一种好方法是使用我用来创建更改跟踪器的相同代码。它只是听可观察的更改。它的代码约为19行。您可以抓住它,而不是将其用于更改跟踪,而只需以一种方法来保存更改时的方法。

要设置更改跟踪,请将此跟踪器属性添加到您的视图模型:

viewModel.tracker = new ChangeTracker(viewModel); 

将这些连接到您的视野中,以确定何时发生变化:

viewModel.tracker().somethingHasChanged(); 

当您想在功能中重置状态时,将其连接到您的视图模型中(例如:加载,保存):

viewModel.tracker().markCurrentStateAsClean; 

可选的是,您也可以通过自己的hashfunction进行状态跟踪。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top