Как получить доступ к переменным экземпляра в движке CoffeeScript внутри шаблона Slim
У меня есть controller Rails, в котором я устанавливаю переменную экземпляра –
@user_name = "Some Username"
В моем шаблоне .slim я использую кофе-движок для генерации javascript и хочу распечатать имя пользователя из кода JavaScript javascript,
coffee: $(document).ready -> name = "#{@user_name}" alert name
Но это javascript, который генерируется ??
$(document).ready(function() { var name; name = "" + this.my_name; alert(name); }
Как получить доступ к переменным экземпляра controllerа в моем коде CoffeeScript?
Я отмечаю это как haml, так как я предполагаю, что haml будет иметь такую же проблему при использовании CoffeeScript.
Что происходит, так это то, что "#{@user_name}"
интерпретируется как CoffeeScript, а не как код Ruby, который оценивается и вводится в источник CoffeeScript. Вы спрашиваете: «Как мне вставить переменную Ruby в мой источник CoffeeScript?»
Короткий ответ: Не делайте этого. Команда Rails приняла намеренное решение не поддерживать встроенный CoffeeScript в шаблонах в 3.1, потому что есть существенные накладные расходы на производительность для компиляции CoffeeScript по каждому запросу (как и следовало бы делать, если бы вы разрешали произвольные строки вводить в исходный код) ,
Мой совет состоит в том, чтобы обслуживать ваши переменные Ruby отдельно как чистый JavaScript, а затем ссылаться на эти переменные из вашего CoffeeScript, например:
javascript: user_name = "#{@user_name}"; coffee: $(document).ready -> name = user_name alert name
Я стараюсь избегать встроенного javascript любой ценой.
Хорошим способом хранения переменных в вашем HTML, который будет использоваться из вашего javascript, является использование атрибутов данных HTML5. Это идеально, чтобы ваш javascript был ненавязчивым.
Вы также можете использовать:
$(document).ready -> name = <%= JSON.generate @user_name %> alert name
Это связано с тем, что JSON является подмножеством JavaScript.