Kan het coffeescript niet gedeeltelijk in het coffeescript weergeven

Ik wil een algemene controller maken die kan worden opgeroepen nadat de pagina is geladen (met AJAX) en verschillende dingen op de pagina kan bijwerken afhankelijk van welke controller deze heeft genoemd.

Het doel is om beter cachen van pagina's en fragmenten mogelijk te maken, terwijl aangepaste elementen voor de gebruikers worden weergegeven.

Mijn raamwerk ziet er als volgt uit:

controllers/general_ajax_controller.rb
views/general_ajax/on_page_load.js.coffee
                 ./_update_some_stuff.js.coffee

De actie on_page_load in de controller verwerkt de logica van het uitzoeken welke deelpartijen moeten worden geladen en de weergave zal de partials weergeven.

In de weergave on_page_load.js.coffee heb ik deze code (vereenvoudigd):

<%= render "update_some_stuff" %>

welke de gedeeltelijke zou moeten maken. In plaats daarvan krijg ik de volgende foutmelding:

  ActionView::Template::Error (SyntaxError: Reserved word "function" on line 2):
  app/views/general_ajax/on_page_load.js.coffee:1:in `_app_views_general_ajax_on_page_load_js_coffee___2304196970850216490_70321203283120'

Ik denk dat het coffeescript is gecompileerd voordat het in de view wordt opgenomen (wat koffie is en geen gecompileerde JS ondersteunt)

Als ik de extensie van de weergave on_page_load wijzig in .js.erb , werkt het . (Vreemd genoeg moet ik mijn server opnieuw opstarten voordat het werkt, weet je waarom?)

Denk je dat dit een probleem is in coffeescript of is het een slechte oefening en daarom niet ondersteund?

Wat vindt u van een zijdelingse discussie over mijn benadering van dynamische scrips?

2

2 antwoord

Een oplossing is om een ​​ruwe geparseerde JavaScript in de weergave in te bedden.

Let op de tegentikken (die coffeescript aangeven dat dit raw JavaScript is) en gebruik van raw() om HTML-escapering van de gegenereerde partitie ongedaan te maken.

`
<%= raw(render("update_some_stuff")) %>
`
5
toegevoegd
Bedankt!! Het is niet erg sexy, maar het werkt wel :)
toegevoegd de auteur Olivier Lance, de bron

Dat komt omdat _update_some_stuff.js.coffee wordt geïnterpreteerd en omgezet naar Javascript. Wanneer het in on_page_load.js.coffee wordt ingevoegd, wordt er een foutmelding weergegeven omdat de Javascript-code vanille niet compatibel is in een Coffee-Script-bestand (het trefwoord function in dit geval).

2
toegevoegd
Ja, ik ben het ermee eens, dit is wat het probleem veroorzaakt. Maar wat beveelt u aan in plaats van render "update_some_stuff" ? Hoe kan ik correct gebruik maken van gedeelten van coffeeScript?
toegevoegd de auteur Cristian, de bron
Mijn idee was om de bestanden te scheiden, zodat elk zijn eigen functionaliteit heeft en het mogelijk is om ze individueel te laden, afhankelijk van of ze nodig zijn of niet (een soort luie lading). Soms is het nodig om meer bestanden tegelijkertijd te laden, dus een render-oproep zou hier niet werken.
toegevoegd de auteur Cristian, de bron
Ik weet het niet. Ik heb dit nog niet nodig. Ik heb respond_to gebruikt om JavaScript te maken. Misschien kun je vanaf daar slechts één bestand of een ander bestand maken op basis van een bepaalde voorwaarde en met behulp van Rails partials.
toegevoegd de auteur David Morales, de bron
Ik ben soms in soortgelijke situaties geweest en ik voelde me vastgelopen, net als jij. Ik denk dat als dat niet mogelijk is, dat wel moet omdat het niet de manier is om het te doen. Stop en denk na over een andere manier om te bereiken wat je nodig hebt. Houd er rekening mee dat elk Rails-verzoek kan worden beantwoord met JavaScript en dat JavaScript automatisch wordt uitgevoerd.
toegevoegd de auteur David Morales, de bron