将信息从ruby传递到js脚本标签
passing information from ruby into js script tags
我有一个Rails应用程序,在检查访问用户的个人资料页面的用户是否是当前用户(使用ruby代码)之后,根据条件逻辑的结果调用JavaScript方法,如下所示。
是否有一种方法可以将用户名(在<%= @user.name %>的ruby代码中可用)传递到脚本标记中,以便我也可以将其传递到正在调用的javascript函数中(除了我传递的其他参数之外)。
/视图/用户/show.html.erb
<% if current_user?(@user) %> #@user represents the user who's profile page is being visited
<script type='text/javascript'>
$(document).ready(function() { #I want to get <%= @user.name %> inside here
var currentuser = true;
app.views.user_view.compTemplates(currentuser)});
</script>
<% else %>
...code ommitted...
<% end %>
更新:根据这个问题的第一个答案的建议,我在脚本标记中这样做了。
var currentusername = <%= @user.name %>;
然而,一旦<%= @user.name %>求值(在本例中为'Veronica'), Veronica第一次出现在js代码中,并且现在注册了一个错误'Veronica is undefined'
我相信你正在寻找这个:http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-escape_javascript
例子:
$('some_element').replaceWith('<%=j render 'some/element_template' %>');
或
$('some_element').replaceWith('<%= escape_javascript render 'some/element_template' %>');
对于您的特定示例,您也可以这样做:(我不认为to_json
是必需的)
<script type='text/javascript'>
$(document).ready(function() {
var currentuser = true;
var userName = <%= @user.name.to_json %>;
app.views.user_view.compTemplates(currentuser)});
</script>
内联Ruby必须在#{}标签内。
var currentusername = '#{ <%= @user.name %> }';
相关文章:
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 如何在运行时在angular 2中加载外部js脚本
- 为什么我的控制器没有启动函数.js脚本
- 如何让JS脚本在导航后继续运行(谷歌chrome控制台)
- 如何使用Node.js脚本从Rally获取用户的修订历史
- 在Debian中运行包含load()和print()函数的JS脚本
- 更改路由后,运行一次js脚本
- Yii2从js脚本的页面上添加来自供应商文件夹的图像、css、js文件
- PHP和JS脚本的奇怪问题,在我刷新页面之前第一次失败
- js脚本未加载到jinja2模板中
- Disqus的计数.js脚本在索引中无法正常运行.html与react.js网站
- 按顺序异步加载JS脚本(等待上一个脚本完成)
- node.js脚本中出现Sqlite Sqlite_MISUSE错误
- ASP.NET MVC路由-动态加载.js脚本
- 在执行JS脚本后监视对DOM的更改
- 在 Node.Js 脚本中使用 Javascript 计时器在特定时间触发事件
- 合并 2 个 JS 脚本 - 老派
- 简单的拖放JS脚本不起作用
- 从外部 js 脚本创建元素并插入到 html 中
- 将参数传递到外部 JS 脚本的最佳方法