Передача нескольких переменных rails в javascript - PullRequest
6 голосов
/ 25 ноября 2011

У меня есть некоторые значения в 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

Проблема в том, что я не могу объявить объекты, и мне приходится объявлять переменные по отдельности. Мне было интересно, есть ли в рельсах какой-нибудь способ легко сделать это, потому что это оказывается довольно взломанным.

Как передать переменные и объекты в JavaScript? Пожалуйста, предоставьте пример синтаксиса

Ответы [ 7 ]

10 голосов
/ 16 августа 2012

Уже немного поздно, но, возможно, это поможет другим. Есть хороший гем под названием 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)

Существует также railscast .

8 голосов
/ 25 ноября 2011

Мне нравится использовать теги сценария типа JSON, чтобы выполнить работу.Это позволяет избежать загрязнения глобального пространства имен, и в Rails оказывается отличная поддержка для сериализации объектов в JSON.

Вы можете использовать что-то подобное в своем представлении:

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

Тогда вам решатьразбирать JSON с помощью JavaScript.Мне нравится использовать jQuery:

$(function () {

    var myVarsJSON = $("#my_vars_json").html(),
        myVars     = $.parseJSON(myVarsJSON);

    console.log(myVars);

});

Надеюсь, это поможет!

2 голосов
/ 13 января 2014

Мне нужно было получить имя пользователя из базы данных и передать значение в переменную javascript в формате JSON.

Затем я объявил переменную ruby с именем token, которая принимает атрибуты id и firstnameиз пользовательской таблицы

  ActiveRecord::Base.include_root_in_json = false

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

В файле erb я использовал следующую строку,

var tokenList = <%= @token.html_safe %>
1 голос
/ 19 февраля 2013

Я думаю, что использование Gon Gem будет лучшим решением.также проверьте это видео ролики

0 голосов
/ 17 июля 2014

Посмотрите на это.

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

Один из самых простых способов - использовать файл js.erb, где вы можете использовать теги ruby ​​для доступа к переменным, которые вы определили вдействие контроллера.

Вам необходимо использовать блок response_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

/ views / items / action.js.erb

$(div).html('The cat has erased your page');
0 голосов
/ 16 сентября 2013

я обнаружил, что gem переменная клиента , это выглядит многообещающе. Ваша конфигурация и переменная передаются клиенту, и вы можете легко получить или установить в клиенте

0 голосов
/ 25 ноября 2011

Может быть, вам стоит попробовать поработать с objects.to_json;)

...