Передача нескольких переменных рельсы в 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
Проблема здесь в том, что я не могу объявить объекты, и мне приходится объявлять переменные индивидуально. Мне было интересно, если в рельсах есть какой-то способ легко сделать это, потому что это оказывается довольно взломать.
Как я должен передать переменные и объекты в JavaScript? Пожалуйста, предоставьте пример синтаксиса
7 ответов
Уже немного поздно, но, возможно, это поможет другим. Есть хороший гем под названием 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.
Мне нравится использовать теги сценария типа 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);
});
Надеюсь, это поможет!
Мне нужно было получить имя пользователя из базы данных и передать значение в переменную javascript в формате JSON.
Затем я объявил ruby
переменная с именем токена, которая принимает id
а также firstname
атрибут из пользовательской таблицы,
ActiveRecord::Base.include_root_in_json = false
@token = User.all.to_json(only: [:id, :firstname])
в erb
файл, я использовал следующую строку,
var tokenList = <%= @token.html_safe %>
Я думаю, что использование Gon Gem будет лучшим решением. также проверьте это видео броски
Я нашел эту переменную клиента Gem, это выглядит многообещающе. Ваша конфигурация и переменная передаются клиенту, и вы можете легко получить или установить в клиенте
Может быть, вам стоит попробовать поработать с objects.to_json;)
Взгляните на это.
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');