2013-10-27 72 views
0

我想獲取一個b標籤的內容,然後用它來查詢輔助方法,在我的rails中。但我無法弄清楚如何去做。有人可以提供一些幫助嗎?將參數傳遞給Rails助手使用Jquery

「查詢」是輔助方法。我需要將它包含在b標籤中的文本傳遞給它。幫幫我..?

<div class="col span_1_of_7"> 
    <section id="feed"> 
     <div id ="infoFeed"> 
      <ul style="font: 10px sans-serif;text-align: justify;"> 
       <script> 
        $(document).click(function(){ 
         <% query($("#tooltip b").text();) %> 
        }); 
       </script> 
       <% Story.all.each do |story| %> 
        <li style="border-style:solid;border-top:thick double #000;"> 
         <p><h4 style="text-align:left;"><%= link_to story.title, story.url, :target => "_blank" %></h4> 
         <%= story.description %> <h7><br /><br /><%= story.source %><br /><%= story.date.to_date %></h7></p></li> 
       <% end %> 
      </ul> 
     </div> 
    </section> 
    <script> $(function() { $('#infoFeed').vTicker();});</script> 
</div> 

回答

2

您正在做的事情可能令人興奮,但這在客戶端 - 服務器Web應用程序中是不可能的。

您需要了解Web應用程序的基礎知識,並理解分離服務器端代碼和客戶端代碼的行。 (Rails) - 是服務器端:這意味着它生成你的HTML或JS或CSS,並且這個HTML/JS/CSS被髮送到客戶端(瀏覽器)。在我們的瀏覽器中,HTML被解析並繪製在屏幕上,然後執行JavaScript代碼,並使用發送的HTML執行任何您想要的操作。此JavaScript無法直接訪問服務器上的Ruby代碼。

好的。讓我們看看你做了什麼。

$(document).click(function(){ 
    <% query($("#tooltip b").text();) %> 
}); 

好的。您已在您的點擊處理程序中爲您的document添加了一個ERB scriptlet(爲什麼要這樣做?)。好吧,我不打算跟你談談你的JavaScript錯誤。讓我們在這裏解決服務器 - 客戶端問題。

這是你期待發生的事情:在Web頁面加載

後,#tooltip b內的文本被使用jQuery的text功能提取,它會被傳遞給query紅寶石助手和它一些東西。

到底發生了什麼

當供Rails生成此頁面,(記得這發生在你的服務器,它不執行你的JavaScript,所有它認爲是與嵌入的Ruby使用<% %>純文本)中,查詢幫助程序被調用,它的參數將是這個$("#tooltip b").text();。我告訴過你,這個JavaScript不會在服務器上執行。所以這被傳遞到查詢中,ruby不知道什麼是$("#tooltip b").text();。由於它甚至不是一個字符串(看到你周圍沒有引號),Ruby可能會引發語法錯誤。

所以底線是!您希望JQuery將#tooltip b的內容傳遞給Ruby函數。這不會發生,因爲這個JavaScript本身是由Ruby生成的,並且只有在構建這個HTML響應併發送到客戶端的瀏覽器(沒有Ruby運行時)後,JavaScript纔會被執行。

我希望你能理解。請閱讀:https://softwareengineering.stackexchange.com/questions/171203/what-are-the-difference-between-server-side-and-client-side-programming


好的。那麼你怎麼做到這一點呢。記得?我說你不能直接訪問Ruby代碼。這是否意味着你可以間接地做到這一點?是!正如您在評論中所建議的那樣使用Ajax。

您需要編寫一個操作幫助您調用query方法。然後,您需要對與您剛寫入的操作相對應的URL執行AJAX調用,並將$("#tooltip b").text();的結果作爲數據傳遞。在你的行動中從params散列中獲取這些數據,並將它傳遞給你的幫助者並進行處理。根據你的願望返回結果爲js或json。

OK步驟:

  1. 創建Rails中的作用,並添加訪問此行動路線。
  2. 在動作中獲取從params哈希中從客戶端發送的數據。我想你知道如何做到這一點。並將其傳遞給查詢幫助器方法。 (你需要在你的控制你的助手模塊,這個工作)
  3. 使用respond_to或只是render將結果返回爲根據您的具體情況jsonjs

  4. 在客戶端,向action的url添加ajax調用並傳遞數據。添加一個成功的回調,這將收到您從您的行動發送的任何內容。用它來做你想做的任何事情。

請參考網站上的資源。這不是寫教程的地方。

+0

感謝您的答覆btw ....我可以使用ajax做到這一點呢? –

+0

是的,當然可以。 –

+0

大聲笑..你能幫忙指出如何請..我想在明天之前完成這最後一部分..和應用程序是完美的這一個最後的東西execpt .. –