使用Jquery将参数传递给rails helper

时间:2013-10-27 13:55:14

标签: jquery ruby-on-rails

我正在尝试获取b标记的内容,然后使用它来查询帮助方法,在我的rails中。但我无法弄清楚该怎么做。有人可以提供一些帮助吗?

“query”是辅助方法。我需要传递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>

1 个答案:

答案 0 :(得分:2)

您正在做的事情可能令人兴奋,但这在客户端 - 服务器Web应用程序中是不可能的。

您需要了解Web应用程序的基础知识,并了解分隔服务器端代码和客户端代码的行。

Ruby(Rails) - 是服务器端:这意味着它生成HTML或JS或CSS,并将此HTML / JS / CSS发送到客户端(浏览器)。在我们的浏览器中,HTML被解析并在屏幕上绘制,然后执行JavaScript代码并使用发送的HTML执行任何操作。此JavaScript无法直接访问服务器上的Ruby代码。

好的。让我们看看你做了什么。

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

行。您已在document的点击处理程序中添加了ERB scriptlet(为什么要这样做?)。好的,我不打算和你谈谈你的JavaScript错误。让我们在这里解决服务器 - 客户端问题。

这是您期望发生的事情:

加载网页后,使用jQuery的#tooltip b函数提取text内的文本,并将其传递给query ruby​​助手并执行某些操作。< / p>

真正发生的事情

当这个页面由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。

确定步骤:

  1. 在Rails中创建操作并添加路由以访问此操作。
  2. 在操作内部获取从params哈希发送的客户端数据。我想你知道怎么做。并将其传递给查询辅助方法。 (您需要在控制器中包含辅助模块才能使其正常工作)
  3. 根据您的具体情况,使用respond_to或仅render将结果返回为jsonjs

  4. 在客户端,将ajax调用添加到操作的url并传递数据。添加成功回调,这将收到您从操作中发送的任何内容。用它做任何你想做的事。

  5. 请参考网上的资源。这不是编写教程的地方。