【问题标题】:Javascript/Rails - How to wrap link_to rather than <a></a> in javascriptJavascript/Rails - 如何在 javascript 中包装 link_to 而不是 <an></a>
【发布时间】:2013-12-05 04:55:06
【问题描述】:

我对 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 信息并在 javascript 中以 &lt;%= link_to" 开头和 do "%&gt; 结尾。任何帮助,将不胜感激。

【问题讨论】:

  • 所以,与其创建,不如说&lt;a...&gt;&lt;img .../&gt;&lt;/a&gt; 你想创建&lt;%= link_to(&lt;im .../&gt;) %&gt; 或类似的东西?
  • 是的。基本上 。有什么想法吗?
  • 没有意义,因为 $("div.img") 只是一个新元素,并没有链接到真正的 dom 树。
  • 那行不通。 JavaScript 在浏览器中运行,但 &lt;%= ... %&gt; 在服务器端进行评估, HTML 被发送到浏览器。除非这实际上是针对客户端模板系统,否则我仍然误解了这个问题。
  • 您使用的是哪一个以及如何调用它?如果这个问题与 Ruby 无关,为什么还要用 Ruby 来标记这个问题呢?您仍然不能从客户端模板调用 Ruby 方法。还是link_to是模板系统提供的方法?如果您没有正确解释您的问题,我们将无法为您提供帮助,我们当然也不想要求您提供所有信息。

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


【解决方案1】:

这是不可能的。

当您在 ruby​​ 中编写 &lt;%= 时,如果您曾经观察到,HTML 标记从不包含 ruby​​ 标记,即&lt;%=

在这里,您通过 javascript 插入 ruby​​ 标签,但 ruby​​ 标签不能写在 HTML 上。它们需要先编译。

你最好关注或类似的东西。

$("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));
});

【讨论】:

  • 感谢您的帖子。这个最基本的概念帮助我意识到我的愚蠢哈哈。
【解决方案2】:

如果您使用的是 Ruby on Rails,请以 .js.erb 结束您的 javascript 文件

现在您可以在 javascript 中包含 Ruby。比如……

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

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

您需要将 javascript 内联编写为 HTML 视图的一部分,或者创建一个对应于控制器方法的 javascript 文件,然后从那里调用它。例如

在您的 Foo 控制器中...

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2016-03-12
    • 1970-01-01
    • 2017-09-05
    相关资源
    最近更新 更多