Встроенный coffeescript в представлении coffeekup в zappa
Есть ли способ передать значения переменных (просто для чтения, очевидно) из приложения во встроенный coffeescript в представлении coffeekup (в zappa), например:
.... @render 'index', myVar:"something"
@view index: ->
coffeescript ->
$(document).ready ->
I need to get to myVar here...
Кажется, это действительно хорошо, если это будет работать... (как альтернатива встроенному JavaScript)
Обновление: вот несколько попыток. Я просто пытаюсь использовать строку во встроенном скрипте в качестве идентификатора.
coffeescript ->
$(document).ready ->
id = myVar
coffeescript ->
$(document).ready ->
id = "#{myVar}"
coffeescript ->
$(document).ready ->
id = @myVar
coffeescript ->
$(document).ready ->
id = "#{@myVar}"
Я написал несколько быстрых javascript в функции script -> (так как это просто строка, я могу легко интерполировать переменные), так что я обошел ее, но способ coffeescript был бы чище. Имеет смысл, что область видимости будет потеряна на стороне браузера - я просто пытался понять, как это сделать.
1 ответ
Я думаю, под "скрипт -> функция", вы имеете в виду что-то вроде:
doctype 5
html ->
body ->
h1 "Hello world."
script "myvar = \"#{@myvar}\""
coffeescript ->
console.log myvar
По крайней мере, это хакерский обходной путь. Это можно сделать и с объектами, обычно используя JSON или аналогичные для сериализации.
Но я бы не отнес это к "чистому кофейному сценарию", так что я думаю, что вопрос все еще стоит!
Просто, чтобы уточнить немного; Проблема здесь в том, что мы выполняем код coffeescript в двух контекстах; один на сервере, который генерирует HTML для отправки клиенту, а другой на самом клиенте через контекст coffeescript ->
построить.
Серверная часть знает о локальных и подобных объектах, поэтому для кода, который выполняется на сервере, просто оценить шаблон на основе coffeescript и заменить переменные шаблона значениями и аналогичными.
Не так на клиенте. Прежде всего, клиент ничего не знает о локальных / шаблонных переменных, он видит только те, которые содержались, когда страница отображалась на стороне сервера. И простое расширение шаблона внутри конструкции coffeescript также не будет работать, поскольку coffeescript не будет знать, ссылаетесь ли вы на локальную переменную на клиенте или на переменную шаблона на сервере. Теоретически могут существовать специальные последовательности, которые сигнализируют "развернуть переменную шаблона внутри кода coffeescript", но тогда мы просто - снова - создаем новый язык шаблонов поверх coffeecup. Конечно, можно сделать так, чтобы он выглядел как обычный код serverLocal(SOMEREF)
где SOMEREF будет заменен на соответствующее значение.
Теоретически, Coffeecup может поддерживать конструкцию, которая разделяет все (или выборку) локальных пользователей также в качестве переменных, к которым должен обращаться клиент, используя "хак", подобный script
хак, который я показал выше, и он, вероятно, будет не слишком отличаться, за исключением использования JSON или аналогичного для поддержки большего количества типов данных, чем простые строки.