我正在尝试获取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>
答案 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才会被执行。
好的。那么你如何实现这一目标呢?记得?我说你不能“直接”访问Ruby代码。这是否意味着你能以某种方式间接地做到这一点?是!正如您在评论中建议的那样使用Ajax。
您需要编写一个可以帮助您调用query
方法的操作。然后,您需要对与您刚刚编写的操作相对应的URL执行AJAX调用,并将$("#tooltip b").text();
的结果作为数据传递。在您的操作中,从params哈希获取此数据并将其传递给您的帮助程序并进行处理。根据您的意愿将结果返回为js或json。
确定步骤:
params
哈希发送的客户端数据。我想你知道怎么做。并将其传递给查询辅助方法。 (您需要在控制器中包含辅助模块才能使其正常工作)根据您的具体情况,使用respond_to
或仅render
将结果返回为json
或js
。
在客户端,将ajax调用添加到操作的url并传递数据。添加成功回调,这将收到您从操作中发送的任何内容。用它做任何你想做的事。
请参考网上的资源。这不是编写教程的地方。