在javascript中访问Ruby对象
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在javascript中访问Ruby对象,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2561字,纯文字阅读大概需要4分钟。
内容图文
我正在开发一个rails应用程序(4.1.8),在我的show视图中需要大量的javascript,我需要一种方法来访问实际js文件中从ActiveRecord返回的数据
这是一个例子:
我的秀控制器
def show
@user = User.find(params[:id])
end
现在我需要在我的show javascript中访问这些数据,但这是我能做到的唯一方法:
我的秀视图
<%= javascript_tag do %>
var myEmail = "<%= j @user.email %>";
// do stuff with myEmail
<% end %>
我的问题是,有没有一种方法可以渲染这个javascript或将其包含在单独的脚本标记中,同时保持用户数据?我不想在这个javascript_tag中编写数百行jQuery和js,调试很痛苦.到目前为止我尝试的所有东西(将它放在资产管道中,渲染一个单独的.js.erb文件)只是将myEmail变成一个包含ruby语句的字符串.有任何想法吗?提前致谢!
解决方法:
03-02-2016 21:10:好吧,有一个工作的例子 – Dibbz到Sergio Tulentsev – 他是对的,甚至不需要解析有效的JSON,当在ruby对象上调用.to_json时它将打印一个有效的JS对象文字代替.这是github repo的工作示例,如果你想克隆它并使用代码 – 请随意,祝你有愉快的一天! (示例使用Rails构建)
除了ØleBjarnstroem的答案暗示使用AJAX,如果你想在JS中使用模型你可以做这样的事情
<% javascript_tag do %>
var user = <%= @user.to_json %>;
<% end %>
现在JS变量用户拥有模型所具有的所有属性,因为它只是将ruby对象直接转换为JSON直接转换为JS对象.
编辑
至于不必编写JS,你可以为它创建一个帮助器 – 这仍然会将JS注入你的页面,但是你可以只提供一个对象作为这个函数的参数,然后只需在你的代码中输出1个而不是做javascript_tag做…结束构造.
有多种方法可以解决这个问题,您可以使用Rails的content_for来设置和获取将在您头脑中呈现的内容.
例如
帮手
module myHelper
def obj_as_js_var(var_name, obj, content_name = nil)
output_tag = javascript_tag("var #{var_name} = #{obj.to_json};".html_safe, type: 'text/javascript')
# if content_name is set, use content_for instead of directly printing the tag inline
if content_name
content_for content_name, output_tag
else
output_tag
end
end
end
现在在视图中使用此帮助程序时
视图
<%= obj_as_js_var('user', @user) %>
# ... rest of page
将在一行上呈现相同的输出,第一个参数(在这种情况下为’user’)是变量将具有的名称,第二个参数(@user)将转换为JSON.
但是等一下……如果我想要它在< head>该文件?
好吧,帮助器有一个可选的第三个参数,如果提供它将返回content_for的值,它将在内容中设置标记.
所以,如果你在layout.erb中有类似的东西
布局
<head>
<!-- ... snipped -->
<%= content_for :javascript if content_for? :javascript %>
</head>
您可以在视图中使用以下内容(请注意,我们不会使用<%=渲染任何内容,而是使用<%,因为我们要保存要在< head>中使用的内容)
<% obj_as_js_var('user', @user, :javascript) %>
现在,布局头部的content_for:javascript将始终在那里呈现输出.请注意,如果在application.js之后加载了content_for:javascript,那么您将无法获得数据!
内容总结
以上是互联网集市为您收集整理的在javascript中访问Ruby对象全部内容,希望文章能够帮你解决在javascript中访问Ruby对象所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。