Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在Ruby on Rails应用程序中检索正确的目标值_Javascript_Ruby On Rails_Stimulusjs - Fatal编程技术网

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

Javascript 无法在Ruby on Rails应用程序中检索正确的目标值,javascript,ruby-on-rails,stimulusjs,Javascript,Ruby On Rails,Stimulusjs,我正在构建一个简单的购物车应用程序,并使用Stimulus JS处理Rails视图和Javascript逻辑之间的交互 在购物车页面中,我通过在UI中循环显示产品,如下所示: <% @curr_cart.items.each do |item| %> <span id="test" data-target="cart.count"> <%= item.quantity %> &

我正在构建一个简单的购物车应用程序,并使用Stimulus JS处理Rails视图和Javascript逻辑之间的交互

在购物车页面中,我通过在UI中循环显示产品,如下所示:


<% @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
。这应该能解决你的问题。缺点是线路之间无法通信,但如果需要,您可以通过另一个刺激控制器来实现。

谢谢!这就是我最后做的。但是,想知道拥有/创建多个控制器实例是否有任何问题(例如,如果这是针对大量项目进行的)?我认为不应该有任何问题,刺激是基于这种用法创建的,一个控制器可以在一个页面上多次使用,应该可以正常工作。