Rails ajax jquery问题

时间:2010-03-20 22:04:35

标签: javascript jquery ruby-on-rails

好的我有这个问题我正在尝试使用Jquery加载部分替换列出的对象。

index.html.erb

<div class="style_image_<%= style.id %>" > <%=link_to image_tag(style.cover.pic.url(:small)), style %></div>

loadshow:

$(function() {
    $(".style_image_<%= style.id %> a").click(function() {
    $(".style_image_<%= style.id %>").html("loading... ")
    $(".style_image_<%= style.id %>").html("<%= escape_javascript(render("show")) %>")
    $.get(this.href, null, null, "html");
    return false;
  });
});

_show.html.erb:

<%=link_to image_tag(style.cover.pic.url(:normal)), style %>

我收到此错误:

missing ) after argument list
[Break on this error] $(".style_image_<%= style.id %>").htm...scape_javascript(render("show")) %>")\n

我的代码存在两个问题:第一个是点击功能未针对.style_image_&lt;%= style.id%&gt; ....即(.style_image_42)如果我用42而不是_style.id替换css目标,则点击目标有效; 为什么会这样?

无论是否有此更改,_show partial都不会呈现,并且会给出上述错误。

使用Javascript并不是那么好,任何帮助都会很棒!

P.S。

我真正想要的效果就像其中一个超酷货主题:http://cargocollective.com/publikspace

谢谢Dan!

alt text http://s3.amazonaws.com/data.tumblr.com/tumblr_kzu1cnOUUs1qbto6oo1_1280.png?AWSAccessKeyId=0RYTHV9YYQ4W5Q3HQMG2&Expires=1269597925&Signature=XuwwBhKKCKu3FWGpmqXmBqwxzS0%3D

3 个答案:

答案 0 :(得分:2)

当然,您可以在javascript文件中使用ERB代码,将其命名为xxxx.js.erb并且您可以访问它。

查看this link,其中显示了如何通过简单地向其添加类来“ajaxify”链接的一个很好的示例。执行此操作后,您可以对链接进行分类,并创建一个.js.erb文件,该文件将包含成功调用的javascript(包括erb代码)。如果你也需要访问class_id,你现在也拥有了对象的id。 id =“yourobj_&lt;%= @ yourobj.id%&gt;”


<强>更新 你javascript失败的原因是因为你需要在引发错误的行中转义你的引号,如下所示:

$(".style_image_<%= style.id %>").html("<%= escape_javascript(render(\"show\")) %>");

或者只使用单引号,如下所示:

$(".style_image_<%= style.id %>").html('%= escape_javascript(render("show")) %>');

答案 1 :(得分:0)

这不起作用的原因是因为你不能在javascript文件中使用ERB代码。 &lt; %%&gt;之间的任何内容Rails不会评估javascript文件。

我建议使用AJAX加载图像,或者只是将它们放在HTML中,然后根据需要使用jQuery显示或隐藏它们。

答案 2 :(得分:0)

仍然不确定为什么我的js.erb文件不理解&lt;%= style.id%&gt;,也许这不是在这里做的事情。

我有两个解决这个问题的方法:

  1. 在控制器中编写javascript并使用link_to_remote。

  2. 不引人注意地将链接路径加载到链接的DIV中:

  3. Image_tag链接如上所述!

    和我的Application.js文件

    $(function() {
    
    $(".style_image a").live('click', function(event) { 
    
        $(this).closest(".style_teaser").load(this.href + " #show_photo");
    
    
        return false;       
    
    });
    });
    

    使用此方法,如果javascript关闭,链接将转到对象的显示路径。

    感谢Nick Craver感谢您对此提出的建议!