ali*_*lik 7 javascript ruby-on-rails rjs ruby-on-rails-3 ruby-on-rails-3.1
我在ruby(变量和对象/哈希)中有一些值,我想在渲染页面上传递给javascript.目前我使用这些方法简单地编写在客户端声明变量的javascript.
def declare_as_js_vars vars
string = ""
vars.each do |name, value|
string += self.declare_as_js_var(name, value)
end
string
end
def declare_as_js_var name, value
name.to_s + "='" + value.to_s + "';"
end
Run Code Online (Sandbox Code Playgroud)
这里的问题是我无法声明对象,并且必须单独声明变量.我想知道是否有一些方法可以轻松地做到这一点,因为这是一个非常黑客.
我应该如何将变量和对象传递给javascript?请提供一些语法示例
Jar*_*aro 10
这有点晚了但也许它会帮助其他人.有一个很棒的宝石叫做gon,它非常适用于将变量从rails传递给javascript.您也可以发送整个对象.
在控制器中你可以有这样的东西
@your_int = 123
@your_array = [1,2]
@your_hash = {'a' => 1, 'b' => 2}
gon.your_int = @your_int
gon.your_other_int = 345 + gon.your_int
gon.your_array = @your_array
gon.your_array << gon.your_int
gon.your_hash = @your_hash
gon.your_object = Table.find(params[:id])
Run Code Online (Sandbox Code Playgroud)
然后在javascript中它将可用
alert(gon.your_int)
alert(gon.your_other_int)
alert(gon.your_array)
alert(gon.your_hash)
alert(gon.your_object.name)
Run Code Online (Sandbox Code Playgroud)
还有关于它的railscast.
我喜欢使用JSON类型的脚本标签来完成工作.它避免了污染全局命名空间,Rails恰好支持将对象序列化为JSON.
你可以在你看来使用这样的东西:
<script id="my_vars_json" type="text/json">
<%= @my_vars.to_json %>
</script>
Run Code Online (Sandbox Code Playgroud)
然后由你来解析使用JavaScript的JSON.我喜欢使用jQuery:
$(function () {
var myVarsJSON = $("#my_vars_json").html(),
myVars = $.parseJSON(myVarsJSON);
console.log(myVars);
});
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
12124 次 |
| 最近记录: |