Jquery jsviews:如何在表单提交而不是onkeydown时触发模型数据更新

Jquery jsviews:如何在表单提交而不是onkeydown时触发模型数据更新,jquery,jsrender,jsviews,Jquery,Jsrender,Jsviews,我最近遇到了jsrender/jsviews。在我的第一次尝试中,我使用双向数据链接/绑定实现了一个表单。这是可行的,但一旦用户在输入字段中键入内容,它就会立即更改模型数据 我想要实现的模式是更新表单提交上的模型数据,允许用户轻松取消他们所做的任何编辑 现在,我已经修改了表单模板,使用单向绑定,然后我只需使用jquery并从DOM中提取值,并在用户提交表单时使用$.observable(..).setProperty(…)更新模型数据 它能工作,但它非常难看。我假设必须有一种更干净的方法,不需要

我最近遇到了jsrender/jsviews。在我的第一次尝试中,我使用双向数据链接/绑定实现了一个表单。这是可行的,但一旦用户在输入字段中键入内容,它就会立即更改模型数据

我想要实现的模式是更新表单提交上的模型数据,允许用户轻松取消他们所做的任何编辑

现在,我已经修改了表单模板,使用单向绑定,然后我只需使用jquery并从DOM中提取值,并在用户提交表单时使用$.observable(..).setProperty(…)更新模型数据

它能工作,但它非常难看。我假设必须有一种更干净的方法,不需要直接查询DOM中表单元素的当前值

在jsviews的onsubmit处理程序中是否有一种干净的方法来触发模型数据更新?或者,实现这种使用模式的首选方式是什么


基本上,我希望实现与AngularJS问题中提到的相同的东西:(即,相当于ng model options=“{updateOn:'submit'}”)

双向绑定是到视图模型,而不是到模型-因此,它是对应于在浏览器中呈现给用户的视图的数据。视图可能会因视图模型更改而更改,而无需在服务器上更新模型

您可以绑定到表单的提交操作<代码>:这将触发saveData方法,在该方法中,您可以向服务器提交适当的当前视图模型数据,服务器将在其中更新模型

但是,如果希望具有撤消功能,则需要在从服务器初始化或更新视图模型时,或上次调用saveData方法将当前视图模型数据保存回服务器时,创建视图模型的快照。“撤消”按钮将恢复到上一个快照

提供便于“快照”的功能(、和):

undo: function() {
  this.merge(savedData); // Revert to previous savedData
  ...
},
saveData: function() {
  savedData = this.unmap(); // Save current data, for subsequent Undo behavior
  ...
}
以下是一些jsfiddle,其中显示了与提交操作的绑定,并带有一个用于恢复到上次保存状态的撤消按钮:

  • 它使用普通JavaScript对象
  • 它使用编译的视图模型
  • 哪个更高级/更复杂-具有多个已编译视图模型。(在某个时候,它将是jsviews.com上的一个示例…)

双向绑定是到视图模型,而不是到模型-因此,与在浏览器中呈现给用户的视图相对应的是数据。视图可能会因视图模型更改而更改,而无需在服务器上更新模型

您可以绑定到表单的提交操作<代码>:这将触发saveData方法,在该方法中,您可以向服务器提交适当的当前视图模型数据,服务器将在其中更新模型

但是,如果希望具有撤消功能,则需要在从服务器初始化或更新视图模型时,或上次调用saveData方法将当前视图模型数据保存回服务器时,创建视图模型的快照。“撤消”按钮将恢复到上一个快照

提供便于“快照”的功能(、和):

undo: function() {
  this.merge(savedData); // Revert to previous savedData
  ...
},
saveData: function() {
  savedData = this.unmap(); // Save current data, for subsequent Undo behavior
  ...
}
以下是一些jsfiddle,其中显示了与提交操作的绑定,并带有一个用于恢复到上次保存状态的撤消按钮:

  • 它使用普通JavaScript对象
  • 它使用编译的视图模型
  • 哪个更高级/更复杂-具有多个已编译视图模型。(在某个时候,它将是jsviews.com上的一个示例…)

非常感谢您。从文档中我不清楚这一点。有一个完整的样本,这将是非常有帮助的,一旦它了。非常感谢你。从文档中我不清楚这一点。有一个完整的样本,这将是非常有帮助的,一旦它了。