2016-03-05 5 views
5

Seit vielen Tagen habe ich versucht, warum eine einfache Verbindung wie diese zu verstehen:Unterschied zwischen application.haml und application.html.haml?

link_to 'My Link', my_path(format: :js), remote: true 

wurde immer wiederkehr vollständige HTML-Dokuments statt Javascript auszuführen in meinem file.js.erb gelegen:

alert('hello world') 

[...]

Nach Stunden der Fehlersuche fand ich, warum:

Wenn ich umbenennen mein Haupt Layout Datei wie: application.haml es macht vollständige HTML-Dokument:

Started GET "/my_path/2.js" for 127.0.0.1 at 2016-03-05 12:28:20 +0100 
Processing by MyController#show as JS 
    Rendered my_path/show.js.erb within layouts/application (0.1ms) 
    Rendered layouts/_sidebar.html.erb (18.9ms) 
    Rendered layouts/_headbar.haml (0.5ms) 
    Rendered layouts/_flash_messages.html.haml (0.2ms) 
    Rendered layouts/_footer.html.erb (0.1ms) 
Completed 200 OK in 102ms (Views: 59.3ms | ActiveRecord: 2.9ms) 

Wenn ich meine Haupt-Layout-Datei umbenennen wie: application.html.haml es Javascript korrekt ausgeführt und läuft meine Hallo Welt Popup:

Started GET "/my_path/8.js" for 127.0.0.1 at 2016-03-05 12:28:34 +0100 
Processing by MyController#show as JS 
    Rendered my_path/show.js.erb (0.1ms) 
Completed 200 OK in 24ms (Views: 21.8ms | ActiveRecord: 0.4ms) 

Warum gibt es einen Unterschied im JavaScript-Verhalten nach den verschiedenen Dateinamen meines Layouts?

+1

Dies ist kein JavaScript-Verhalten, es ist, wie Schienen nach Vorlagen sucht. Zuerst suchen Sie nach '. ' Dateien, dann nach '. '. Wenn Sie eine generische Vorlage ohne das Format haben, wird es für alle Formate verwendet. – BroiSatse

+0

Wenn eine der Ansichtsvorlagen für eine Aktion fehlt, müssen die Schienen einen Fehler melden, der angibt, wie sie gesucht wird, einschließlich Pfad, Format usw. Mit diesen Informationen kennen Sie die Suchreihenfolge. – canoe

Antwort

1

Wie BroiSatse sagte:

Dies ist kein Javascript Verhalten, es ist, wie sucht nach Vorlagen Schienen. Zuerst suchen Sie nach <action_name>.<templating-engine> Dateien, dann nach <action_name>.<format><templateing-engine>. Also wenn Sie generische Vorlage ohne das Format haben, wird es für alle die Formate übernommen.