как передать значение gon в application.coffee? - PullRequest
0 голосов
/ 31 марта 2012

Я использую rails gon https://github.com/gazay/gon, чтобы получить данные из контроллера, легко вставленные в представления. Чтобы получить представление (просто пример):

def show
 gon.alert = "this is an alert"
end

теперь внутри моего show.haml:

:javascript
  alert(gon.alert)

Теперь у меня всегда есть доступ к значению гона, которое я установил в действии контроллера, НО что, если вы хотите получить доступ к значениям гона из своего приложения.gon.current_user = 1, который я могу использовать внутри application.coffee?

Ответы [ 2 ]

1 голос
/ 01 апреля 2012

Вот ответ на первый вопрос: в application.coffee нет ничего особенного, он все равно компилируется в javascript.Просто убедитесь, что вы получаете доступ к gon.some_variable в событии DOM Ready:

$->
  alert gon.alert

Но тогда вы столкнетесь с другой проблемой - как определить, какая переменная принадлежит какому контроллеру / действию.Более того, gon.alert будет неопределенным, если вы визуализируете другой контроллер / действие.

Поэтому вам необходимо установить условие в вашем application.coffee, которое будет выполняться только на определенной странице (контроллер / действие).Например, вы можете положиться на обнаружение идентификаторов элементов:

$->
  if $('#pages_controller_show').length
    alert gon.alert 

Ваш show.haml, конечно, должен включать элемент с id="pages_controller_show".

1 голос
/ 31 марта 2012

Если вы хотите установить значение gon, к которому вы можете обращаться из любого действия контроллера и, следовательно, всегда доступны в application.coffee, вы можете установить before_filter в вашем ApplicationController.

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :set_gon_values

  private

  def set_gon_values
    gon.current_user = 1  # or whatever you want to set here
  end
end

Это будет запускать метод set_gon_values перед каждым действием на всех ваших контроллерах. Это работает, потому что все ваши контроллеры наследуются от ApplicationController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...