Невозможно отобразить частичку кофе внутри скрипта кофе - PullRequest
2 голосов
/ 06 декабря 2011

Я хочу создать общий контроллер, который можно вызывать после загрузки страницы (с помощью AJAX), и обновлять различные элементы на странице в зависимости от того, какой контроллер вызвал его.

Цель состоит в том, чтобы улучшить кэширование страниц и фрагментов при отображении пользовательских элементов для пользователей.

Моя структура выглядит следующим образом:

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

* on_page_loadaction в контроллере обрабатывает логику выяснения, какие партиалы загружать, и представление будет отрисовывать партиалы.

В представлении on_page_load.js.coffee у меня есть этот код (упрощенный):

<%= render "update_some_stuff" %>

, который должен отображать частичное.Вместо этого я получаю эту ошибку:

  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'

Я думаю, что coffeescript компилируется перед включением его в представление (которое является coffee и не поддерживает скомпилированный js)

Если я изменяю расширениеиз on_page_load вида .js.erb, затем работает .(Как ни странно, я должен перезапустить свой сервер, прежде чем он заработает, знаете ли вы, почему?)

Как вы думаете, это проблема в coffeescript или это плохая практика и поэтому не поддерживается?

В качестве дополнительного обсуждения, что вы думаете о моем подходе к динамическим скрипам?

Ответы [ 2 ]

5 голосов
/ 14 сентября 2012

Одним из решений является встраивание необработанного разобранного javascript в представление.

Обратите внимание на обратные тики (которые сообщают coffeescript, что это raw javascript) и использование raw () для отмены экранирования HTML от обработанной части.

`
<%= raw(render("update_some_stuff")) %>
`
2 голосов
/ 09 февраля 2012

Это потому, что _update_some_stuff.js.coffee интерпретируется и преобразуется в Javascript.Когда он вставляется в on_page_load.js.coffee, возникает ошибка, поскольку ванильный код Javascript не совместим внутри файла Coffee-Script (в данном случае ключевое слово function).

...