2017-08-01 62 views
0

我認爲這應該是非常簡單的,但無法弄清楚。客戶端變量與Rails/JS

我試圖通過單擊按鈕來添加一些表單域,但我有一個限制,並且每個新域都必須被編號。所以我必須在客戶端有一個櫃檯。

我被困在第一步,我無法在客戶端做一個計數器變量。我很確定我的代碼沒有執行,因爲我甚至沒有得到「加載」消息。

但我不知道爲什麼我的javscript不工作。我得到以下錯誤在控制檯上:

Uncaught ReferenceError: addQuickReply is not defined 
    at HTMLAnchorElement.onclick 

當我添加的功能buyers.coffee功能:

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

我得到這樣的警告:

counter is:undefined 

/視圖/買家/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

Rails是後端JS是前端,youre設法使軌道變量從前面接收一些東西,你不能這樣做,你可以從後端發送一些東西到前端。

因此,在你的代碼,這必須通過paramether作爲計數器的js函數:

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

這必須是,這樣一來:

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

顯示錯誤,因爲你沒有創建一個js函數。

我認爲這可能會解決您的問題。

+0

我想我的問題是關於代碼的遠程執行和頁面的更新。出於某種原因(我不知道這是否預計會發生),只有最初加載頁面的JS函數才能執行。問題在於腳本是在單擊按鈕後加載到div中的部分內部。此代碼不會執行。有關這個的任何線索? – mknarciso