2016-02-08 32 views
0

我對rails很新穎,我有一個網站已經有一個js函數,它使用onchange方法與<select>。該代碼是有點像這樣:在rails中使用輔助方法更改InnerHTML

var text = document.getElementById("dude");

text.innerHTML = "bro";

的事情是,我要改寫在Ruby中的一切。 有沒有辦法像使用助手方法一樣傳遞參數並更改html的值?

<p><%= text = "hey" %></p>

<% helper_method(text) %>

我一直在四處尋找一個答案,看到RJS?不知道這是否相關,但我真的不知道從哪裏開始。

謝謝

+3

的'onchange'處理程序在瀏覽器中執行,以提供互動*不*聯繫服務器:JQuery如果你希望(從魔鬼的杯子喝水)都有自己的$.ajax函數來處理它。試圖在Ruby中重寫這種說法毫無意義。 –

回答

0

的Javascript

你有最大的問題是,你困惑的Ruby & JS的角色。

Ruby是一種服務器端語言;它在服務器上運行,爲您的瀏覽器編譯純HTML。這個HTML被傳遞給你的前端客戶端(瀏覽器),然後渲染它。

-

Ruby == PHP - 在 「DOM」 後,它不能改變交互元素已加載。 Javascript 可以,這就是爲什麼你不能完全翻譯你的代碼到JS。

捕捉onchange(事件)的唯一方法是使用JS/jQuery來處理它們:

onchange="return js_function();" 

(Java)Scripts嵌入或包括來自HTML網頁,並與的的Document Object Model (DOM)互動頁面

Ruby只能在服務器上呈現HTML時執行此操作。 JS是目前將事件綁定到元素的唯一方式。然而,您解釋這些事件的方式可以利用ruby。


阿賈克斯

使用Ajax (Asynchronous Javascript and XML)允許你發送請求到服務器,追加結果到DOM。在服務器端處理誘導紅寶石,讓您使用它提供最適當的反應:

#HTML 
<%= link_to "x", "path", onchange: "return js_function();" %> 

#app/assets/javascripts/application.js 
function js_function() { 
    var value = // ajax // 
    var text = document.getElementById("dude"); 
    text.innerHTML = value; 
} 

我不知道你想做什麼;使用Ajax與純JS是相當困難的;

#app/assets/javascripts/application.js 
function js_function() { 
    var value = $.get("your/path"); 
    var text = document.getElementById("dude"); 
    text.innerHTML = value; 
} 

#config/routes.rb 
resources :your do 
    get :path, on: :collection 
end 

#app/controllers/your_controller.rb 
class YourController < ApplicationController 
    def path 
    respond_to do |format| 
     format.js { render text: "TESTER" } 
    end 
    end 
end 
+0

非常感謝,這非常有幫助。我從來沒有真正進入服務器端,我只使用表單向.php文件發送信息,而沒有真正與數據庫有關的基本功能,所以這非常有用。非常感謝提供信息! – gazayas

+1

沒問題; Rails是一個完全不同的魚PHP水壺,你應該看看獲得它的經驗,知道它如何工作等 –

0

ruby​​代碼會在瀏覽器中執行。用ruby編寫代碼最終將生成JavaScript代碼,然後在瀏覽器中執行。

如果你想要在服務器響應中填充值,那麼你需要鉤住服務器命中並根據響應修改該值。這一切都需要在JavaScript中完成。

相關問題