2013-06-22 71 views
0

这是我的侧栏的代码。当用户点击其中一个链接时,会调用js.erb文件,但我不知道如何使js.erb文件能够区分用户点击哪个链接。我的想法是使用一个ID,所以基本上将实例变量传递给js.erb文件。这就是我认为可以做到的方式,但我不确定。将变量从Rails传递给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 %> 

什么我做错了,或者我应该如何通过某种标志或编号到js.erb文件,以便我可以显示正确的信息?

回答

1

我不知道你是否了解网站是如何工作的。 Ruby是一种服务器端语言,它被执行并且html + js被发送到Web浏览器。 JS文件(大多数情况下)只在资产编译/首次运行时执行一次,并且永远不会再更新。
因此,您无法像运行时一样在运行时从js引用Ruby代码。 另外你在id属性中使用非法字符,见What characters are allowed in DOM IDs?

回到ruby/js的东西。

您可能希望通过AJAX请求部分,传递一个id属性

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

然后在ProjectsController#指数呈现你想要什么(例如基于当前用户)。

而且 - 一个很好的规则是先使事情没有Ajax工作,然后添加AJAX调用。