【问题标题】:keeping original data from an observable保留来自可观察对象的原始数据
【发布时间】:2012-07-16 05:27:29
【问题描述】:

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

该应用程序正在使用带有用于模块加载的 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();
          });  

但是我不服气,toggle 或 hide 功能是提交输入框中的值吗?

输入标签本身绑定了一个名字:

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

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

【问题讨论】:

    标签: jquery knockout.js


    【解决方案1】:

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

    如果您希望能够更新/取消对 observable 的写入,那么您可能希望查看类似于我在这篇文章中描述的技术:http://www.knockmeout.net/2011/03/guard-your-model-accept-or-cancel-edits.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 2018-01-12
      • 2023-04-08
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      相关资源
      最近更新 更多