这很难用任何例子来解释,因为我正在为一家公司开发应用程序并且无法粘贴源代码。我将尽力解释。
应用程序正在使用knockout.js和require.js进行模块加载,以及jquery。我已经定义了一个自定义bindingHandler,可以调用它行,它定义了一些基于编辑,删除,更新,取消列表中名称行为的链接的Jquery函数。
用户将其名称键入绑定到淘汰AppViewModel的输入中。他们单击添加按钮将其添加到observableArray,然后在浏览器中输出。
完成此操作后,他们可以编辑名称bly点击修改,或使用删除链接将其删除。
如果他们点击编辑,他们会看到一个新的div(以前隐藏),使他们能够在文本框中编辑他们的名字,并选择更新,将新名称添加到列表中,或者他们可以取消将它们带回不可编辑的列表。
但是,我的问题是,如果用户更改其名称,在编辑过程中的输入框中然后选择取消,则仍会添加新名称而不是原始名称。
我确信这个问题只是在这个jQuery函数中:
$(element).find('.cancelBtn').on('click', function() {
$(element).find('.editRow, .detailRow').toggle();
});
但是我不相信,切换或隐藏功能是否在输入框中提交了值?
输入标记本身绑定了一个名称:
它对应于appViewModel: ... self.name = ko.observable('');
只是想知道可观察的绑定是否是双向阻止任何返回到名称的原始状态,并且只是继续观察输入到输入框中的更新名称,在点击任何链接之前改变它?
答案 0 :(得分:1)
如果使用input
绑定绑定到value
的{{1}},则默认情况下,它会在更改事件触发时更新observable。您可以使用" valueUpdate"附加绑定以添加其他事件以触发更新(如keyup),但始终会添加更改事件。因此,如果用户对您的输入进行编辑然后离开该字段,它将更新该可观察对象。
如果您希望能够更新/取消对可观察对象的写入,那么您可能希望查看我在本文中描述的技术:http://www.knockmeout.net/2011/03/guard-your-model-accept-or-cancel-edits.html