Javascript / Rails - 如何在javascript中包装link_to而不是<a></a>

时间:2013-12-05 04:55:07

标签: javascript jquery ruby-on-rails link-to

我对rails很新,并且正在使用jpages插件来构建一个概念。我的javascript如下:

的Javascript

$("ul#thumbs li").click(function(){
    $(this).addClass("selected").siblings().removeClass("selected");
    var img = $(this).children().clone().addClass("animated fadeIn");
    var linkValue = $(this).children("img").attr("alt");
    $("div.img").html( img ).wrap($('<a></a>').attr('href', linkValue));
});

HTML

<ul id="thumbs" class="clearfix">
    <li><img src="example1.jpg" alt="page1.html"></li>
    <li><img src="example2.jpg" alt="page2.html"></li>
    <li><img src="example3.jpg" alt="page3.html"></li>
</ul>

我希望能够改变这一行:

$("div.img").html( img ).wrap($('<a></a>').attr('href', linkValue));

这样包装就像:

$("div.img").html( img ).attr(linkValue));

,html为:

<li>
    <img src="example1.jpg" alt="page1_path">
</li>

必须有一种更简单的方法,而不是采用alt信息并在开头<%= link_to"和最后do "%>包装javascript。任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:3)

这是不可能的。

当您在ruby中编写<%=时,如果您曾观察过,HTML标记永远不会包含ruby标记,即<%=

在这里,您通过javascript插入ruby标签,但无法在HTML上编写ruby标签。他们需要先编译。

更好的关注或类似的东西。

$("ul#thumbs li").click(function(){
    $(this).addClass("selected").siblings().removeClass("selected");
    var img = $(this).children().clone().addClass("animated fadeIn");
    var linkValue = $(this).children("img").attr("alt");
    $("div.img").html(img);
    $("div.img img").wrap($('<a></a>').attr('href', linkValue));
});

答案 1 :(得分:0)

如果您使用的是Ruby on Rails,请使用.js.erb

结束您的javascript文件

现在你可以在你的javascript中包含Ruby了。 e.g ...

$("#container").append(<%= link_to "Foo", root_path %>); 

如果您需要访问控制器或模型(我怀疑您可能需要),那么从您的资产调用ruby Javascript将无效。

你需要编写内联的javascript,作为HTML视图的一部分,或者创建一个与控制器方法相对应的javascript文件,并从那里调用它。 e.g。

在你的Foo控制器......

def some_method
  respond_to do |format|
    format.js
  end
end

在您的Foo视图中,创建一个包含您需要的所有JavaScript的some_method.js.erb。该文件可以访问您的控制器和模型方法。