我正在构建一个 Invoicing 应用程序,其中Invoice可以有各种Items。
在发票视图中,每个项目都有这样的一行:
<%= f.text_field :price %>
<%= f.text_field :quantity %>
可以使用 Ajax 将新项目添加到发票中,即无需重新提交页面。
这工作得很好。
不过,如果所有项目的总数也可以通过 Ajax 更新,而用户不必每次都重新提交页面,那就太好了。
谁能告诉我如何做到这一点?
谢谢你的帮助。
我正在构建一个 Invoicing 应用程序,其中Invoice可以有各种Items。
在发票视图中,每个项目都有这样的一行:
<%= f.text_field :price %>
<%= f.text_field :quantity %>
可以使用 Ajax 将新项目添加到发票中,即无需重新提交页面。
这工作得很好。
不过,如果所有项目的总数也可以通过 Ajax 更新,而用户不必每次都重新提交页面,那就太好了。
谁能告诉我如何做到这一点?
谢谢你的帮助。
这取决于您现有的代码。您是否以 JSON 格式提交/接收数据?尝试使用某种客户端处理(纯 javascript、jQuery 或其他框架)。
:remote
或者您使用带有 js.erb 模板的更传统的 Rails表单?如果是这样,您可以在 create.js.erb 中更新发票总额。类似的东西(我假设发票总额用 id="total" 的标签包装,项目属于发票,发票有总计字段)
... # your current code
$("#total").update("<%= escape_javascript(@item.invoice.total)%>");
删除和更新操作相同。
您应该考虑使用某种前端 MVC 或 MVVM 框架来处理这个问题。看一下knockoutjs:
通过应用模型-视图-视图模型 (MVVM) 模式来简化动态 JavaScript UI
http://learn.knockoutjs.com/#/?tutorial=collections <-- 本教程几乎准确地展示了您所追求的。
基本上,您将设置一个 viewModel 来表示您的视图,该视图将具有一组行条目,这将是“可观察的”,这意味着无论何时更改(添加到或从中删除)您对它的绑定都会更新. 例如,它可以是与每个行项目绑定的 with 。
然后你可以有一个计算出的 observable 会自动更新