无法在 Ruby on Rails 应用中检索正确的目标值

问题描述

我正在构建一个简单的购物车应用程序并使用 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。这应该可以解决您的问题。缺点是线路不能相互通信,但如果需要,可以通过另一个刺激控制器来实现。