1

这很难用任何示例来解释,因为我正在为一家公司开发应用程序并且无法粘贴源代码。我会尽量简单地解释。

除其他外,该应用程序正在使用带有 require.js 的 knockout.js 用于模块加载,以及 jquery。我已经定义了一个自定义的 bindingHandler,我们称之为 rows,它定义了许多 Jquery 函数,这些函数基于列表中名称的编辑、删除、更新、取消行为归因于链接。

  1. 用户在绑定到淘汰 AppViewModel 的输入中键入他们的姓名。他们单击添加按钮将其添加到 observableArray,然后在浏览器中输出。

  2. 完成此操作后,他们可以通过单击编辑来编辑名称,或使用删除链接将其删除。

  3. 如果他们点击编辑,他们会看到一个新的 div(以前是隐藏的),让他们能够在文本框中编辑他们的名字并选择更新,将新名字添加到列表中,或者他们可以取消,这会将他们带回非可编辑列表。

但是,我的问题是,如果用户更改了他们的名称,在编辑过程中的输入框中,然后选择取消,仍然会添加新名称而不是原来的名称。

我确信问题只是在这个 jQuery 函数中:

          $(element).find('.cancelBtn').on('click', function() {      
              $(element).find('.editRow, .detailRow').toggle();
          });  

但是我不相信,切换或隐藏功能是否提交输入框中的值?

输入标签本身绑定到一个名称:

对应于 appViewModel: ... self.name = ko.observable('');

只是想知道可观察绑定是否是两种方式,是否阻止任何返回名称的原始状态,并且只是继续观察输入框中的更新名称,在单击任何链接之前对其进行更改?

4

1 回答 1

1

如果您input使用绑定将可观察对象绑定到可观察对象value,则默认情况下,它将在更改事件触发时更新可观察对象。您可以使用“valueUpdate”附加绑定来添加附加事件以触发更新(如 keyup),但始终添加更改事件。因此,如果用户对您的输入进行编辑然后离开该字段,它将更新可观察对象。

如果您希望能够更新/取消对 observable 的写入,那么您可能希望查看我在这篇文章中描述的技术:http ://www.knockmeout.net/2011/03/guard-你的模型接受或取消edits.html

于 2012-07-17T15:06:11.640 回答