将多个rails变量传递给javascript



我在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

这里的问题是我不能声明对象,而必须单独声明变量。我想知道在rails中是否有一些方法可以轻松地做到这一点,因为这被证明是相当的hack。

我应该如何传递变量和对象到javascript?请提供一些语法示例

这有点晚了,但也许它会帮助其他人。有一个很好的宝石叫做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])

那么在javascript中,它将像

一样可用
alert(gon.your_int)
alert(gon.your_other_int)
alert(gon.your_array)
alert(gon.your_hash)
alert(gon.your_object.name)

还有一个关于它的广播。

我喜欢使用JSON类型的脚本标记来完成这项工作。它避免了污染全局命名空间,并且Rails恰好非常支持将对象序列化为JSON。

您可以在视图中使用如下内容:

<script id="my_vars_json" type="text/json">
    <%= @my_vars.to_json %>
</script>

然后由您来用JavaScript解析JSON。我喜欢使用jQuery:

$(function () {
    var myVarsJSON = $("#my_vars_json").html(),
        myVars     = $.parseJSON(myVarsJSON);
    console.log(myVars);
});

希望有帮助!

我需要从数据库中获取用户的名字,并将值以JSON格式传递给javascript变量。

然后我声明了一个名为token的ruby变量,它从用户表中获取idfirstname属性,

  ActiveRecord::Base.include_root_in_json = false
  @token = User.all.to_json(only: [:id, :firstname])

erb文件中,我使用了以下行

var tokenList = <%= @token.html_safe %>

我认为使用Gon gem将是最好的解决方案。还可以查看这个视频

也许你应该尝试使用对象。to_json;)

我发现了gem客户端变量,它看起来很有希望。您的配置和变量传递给客户端,您可以轻松地在客户端

中获取或设置。

看看这个

http://tech.thereq.com/post/17243732577/rails-3-using-link-to-remote-true-with-jquery-ujs

最简单的方法之一是使用js。您可以在其中使用ruby标记来访问您在控制器操作中定义的变量。

你需要在控制器动作中使用respond_to块,指定能够响应javascript的动作。

items_controller.rb

class ItemsController < ApplicationController
  def action
    respond_to do |format|
      format.js
      #format.html {}    #  These are for allowing other types of formats to be responded to.
      #format.json {}    #  But they are not necessary for using this js.erb way of doing things.
    end
  end
end

/视图/项目/action.js.erb

$(div).html('The cat has erased your page');

相关内容

  • 没有找到相关文章

最新更新