2012-03-31 12 views
0

Im mit Schiene https://github.com/gazay/gon gon leicht in Ansichten eingefügt zu bekommen Daten von der Steuerung eine Vorstellung zu bekommen (nur ein Beispiel):Wie übergibt man einen gon-Wert an application.coffee?

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

jetzt in meinem show.haml:

:javascript 
    alert(gon.alert) 

Jetzt habe ich immer Zugriff auf einen Gon-Wert, den ich in der Controller-Aktion vor ABER eingestellt habe. Was, wenn Sie auf gon-Werte von Ihrem application.coffee zugreifen möchten?

  • Wo legen Sie ein gon.current_user = 1 fest, das ich in application.coffee verwenden kann?

Antwort

1

Wenn Sie einen gon Wert festlegen möchten, dass Sie von jedem Controller-Aktion zugreifen kann und somit immer verfügbar in application.coffee können Sie eine before_filter in Ihrem ApplicationController einrichten.

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 

dass die set_gon_values Methode vor jeder Aktion auf allen Ihren Controller ausgeführt werden soll. Dies funktioniert, weil alle Ihre Controller von ApplicationController erben.

1

Hier ist die Antwort auf die erste Frage: es gibt nichts besonderes in application.coffee, kompiliert es trotzdem zu Javascript. So stellen Sie sicher, dass Sie gon.some_variable in DOM Bereit Ereignis zugreifen:

$-> 
    alert gon.alert 

Aber dann werden Sie ein anderes Problem konfrontiert, wie Sie bestimmen, welche Variable, auf die Controller/Aktion gehört. Außerdem ist gon.alert undefiniert, wenn Sie einen anderen Controller/eine andere Aktion rendern.

Sie müssen also eine Bedingung in Ihrem application.coffee einrichten, die nur auf einer bestimmten Seite (Controller/Aktion) ausgeführt wird. Zum Beispiel können Sie auf Erfassungselement ids verlassen:

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

Ihr show.haml muss ein Element mit id="pages_controller_show", natürlich enthalten.

Verwandte Themen