1

这是我的侧边栏的代码。当用户单击其中一个链接时,将调用 js.erb 文件,但我不知道如何使 js.erb 文件能够区分用户单击的链接。我的想法是使用一个id,所以基本上将实例变量传递给js.erb文件。这就是我认为可以做到的方式,但我完全不确定。

<li>
    <%= link_to 'User Details', '/dashboard', :id => 'User Details', remote: true %>
</li>
<li>
    <%= link_to 'Projects', '/dashboard', :id => 'Projects', remote: true %>
</li>

有使用此代码运行的 js.erb 文件:

<% if :id == 'User Details' %>
    $('#ajax').html("<%= escape_javascript(render :partial => 'users/edit', :locals => { :user => @user } ) %>");
<% elsif :id == 'Projects' %>
    $('#ajax').html("<%= escape_javascript(render :partial => 'projects/index', :locals => { :projects => @projects } ) %>");
<% end %>

我做错了什么或者我应该如何将某种标志或 id 传递给 js.erb 文件,以便我可以显示正确的信息?

4

1 回答 1

1

我不确定您是否了解网站的工作原理。Ruby 是一种服务器端语言,它被执行并将 html + js 发送到 Web 浏览器。JS 文件(在大多数情况下)仅在资产编译/首次运行时执行一次,并且永远不会再次更新。
因此,您无法在运行时引用来自 js 的 Ruby 代码。此外,您在 id 属性中使用了非法字符,请参阅DOM ID 中允许哪些字符?

回到 ruby​​/js 的事情。

您可能想通过 ajax 请求部分,传递一个 id 属性

$('#ajax').load('<%= here_put_helper_method_to_some_path %>');

然后在 ProjectsController#index 中呈现你想要的(例如基于当前用户)。

另外 - 一个好的规则是首先让事情在没有 ajax 的情况下工作,然后添加 ajax 调用。

于 2013-06-22T21:08:05.673 回答