使用Rails / JS

时间:2017-08-01 17:47:35

标签: javascript ruby-on-rails

我认为这应该很简单,但无法弄清楚。

我试图通过点击按钮添加一些表单字段,但我有一个限制,每个新字段都必须编号。所以我必须在客户端有一个柜台。

我陷入了第一步,我无法在客户端制作一个计数器变量。我非常确定我的代码没有执行,因为我甚至没有得到#34;加载"消息。

但我不知道为什么我的javscript不起作用。我在控制台上收到以下错误:

Uncaught ReferenceError: addQuickReply is not defined
    at HTMLAnchorElement.onclick

当我将该功能添加到buyer.coffee函数时:

@addQuickReply = (counter) ->
  alert("counter is:"+counter)

我收到此提醒:

counter is:undefined

/views/buyers/answer.html.erb

<div class="col-md-8 col-md-offset-2">
  <h3>Responder <%= @buyer.name %></h3>
  <ul class="nav nav-pills">
    </li>
    <li role="presentation" id="quick-button">
      <%= link_to 'Quick Reply', load_form_path(id: @buyer.id, type: "quick"), method: :post,
                    remote: true %>
    </li>

  </ul>
  <div id="form-container">
  </div>

</div>

/views/buyers/load_form.js.erb.html

document.getElementById('form-container').innerHTML = '<%= j render(@type) %>';

/views/buyers/_quick.html.erb

</br>
<%= javascript_include_tag "load_quick_reply" %>
<%= form_tag("/answers/quick", method: "post", class: "form-horizontal") do %>
  <%= hidden_field_tag("type", "quick") %>
  <%= hidden_field_tag("buyer_id", @buyer.id) %>
  <div class="row">
    <div class="col-md-12">
      <div class="form-group">
        <label for="title" class="col-sm-2 control-label">Texto</label>
        <div class="col-sm-10">
          <%= text_field_tag(:text,nil, class: "form-control") %>
        </div>
      </div>
    </div>
  </div>
  <div class="replies">
    <%= render partial: 'quick_each', locals: {number: 0} %>
  </div>
  <div class="row">
    <div class="col-md-3">
      <div class="form-group">
        <a class="btn btn-primary" onclick="addQuickReply()">New Reply</a>
        <%= submit_tag("Enviar" , role: "button", class: "btn btn-info" ) %>
      </div>
    </div>
  </div>
<% end %>
<script type="text/javascript">
  alert("loaded");
   var counter=0;
   var container = document.getElementById("replies");
   function addQuickReply(){
     counter++;
     alert("counter is :"+counter);
   }
</script>

1 个答案:

答案 0 :(得分:0)

Rails是后端js是前端,你试图让rails变量从前面收到一些东西,你不能这样做,你可以从后端向前发送一些东西。

所以在你的代码中,这必须传递一个参数作为js函数的计数器:

<a class="btn btn-primary" onclick="addQuickReply(params)">New Reply</a>

这一定是这样的:

addQuickReply = (counter) ->
alert("counter is:"+counter)

显示错误是因为您没有创建js函数。

我认为这可能会解决您的问题。