Dal momento che molti giorni ho cercato di capire il motivo per cui un semplice link come questo:Differenza tra application.haml e application.html.haml?
link_to 'My Link', my_path(format: :js), remote: true
era sempre piena tornando documento HTML invece di eseguire javascript situato nel mio file.js.erb:
alert('hello world')
[...]
Dopo ore di debugging ho trovato il motivo:
Quando ho rinominare il mio layout principale di file come: application.haml
rende piena documento HTML:
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)
Quando a rinominare il file di layout principale, come: application.html.haml
esegue JavaScript correttamente e viene eseguito il mio ciao mondo 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)
Perché c'è una differenza nel comportamento di javascript in base ai diversi nomi di file del mio layout?
Questo non è un comportamento javascript, è il modo in cui i binari cercano i modelli. Prima cerca i file '. ', quindi per '. '. Pertanto, quando si dispone di un modello generico senza il formato, verrà preso per tutti i formati. –
BroiSatse
Se manca un modello di vista per un'azione, i binari segnaleranno un errore che indica come lo sta cercando incluso il percorso, il formato, ecc. Con tali informazioni, conoscerai l'ordine di ricerca. – canoe