问题描述
我正在构建一个简单的购物车应用程序并使用 Stimulus JS 来处理 Rails 视图和 Javascript 逻辑之间的交互。
<% @curr_cart.items.each do |item| %>
<span id="test" data-target="cart.count">
<%= item.quantity %>
</span>
我正在尝试添加从购物车中删除商品的“删除”功能。我的删除逻辑工作正常,但我无法更新正确项目的数量。每次我移除一个产品时,只有第一件的数量会减少。
这是我更新的方式:
this.countTarget.innerHTML = Number(this.countTarget.innerHTML)- 1;
尝试使用值和数据属性,但没有成功:皱眉:
今天大部分时间都在试图解决这个问题,但没能解决。有关如何解决此问题的任何想法或建议?
谢谢!
解决方法
根据您发布的代码和描述,我假设您正在为所有购物车项目使用一个刺激控制器实例。像这样:
<div data-controller="cart-items">
<% @curr_cart.items.each do |item| %>
<span id="test" data-target="cart.count">
<%= item.quantity %>
</span>
...
other fields
...
<% end %>
</div>
这种方法有一个问题,您必须弄清楚您要编辑的项目并更改正确的字段。据我了解,项目不应相互依赖。我建议您每行使用一个刺激控制器实例:
<% @curr_cart.items.each do |item| %>
<div data-controller="cart-item">
<span id="test" data-target="cart.count">
<%= item.quantity %>
</span>
...
other fields
...
</div>
<% end %>
现在JS控制器中每一行都绑定到自己,你不必在countTargets
数组中搜索特定行,每行只有一个countTarget
。这应该可以解决您的问题。缺点是线路不能相互通信,但如果需要,可以通过另一个刺激控制器来实现。