有没有办法将变量值(显然只是为了读取)从应用程序传递到coffeekup视图中的嵌入式咖啡脚本(在zappa中),例如:
.... @render 'index', myVar:"something"
@view index: ->
coffeescript ->
$(document).ready ->
I need to get to myVar here...
如果它能工作,这似乎真的很光滑...(作为嵌入式JavaScript的替代方案)
更新:这里有一些尝试。我只是尝试将嵌入式脚本中的字符串用作 id。
coffeescript ->
$(document).ready ->
id = myVar
coffeescript ->
$(document).ready ->
id = "#{myVar}"
coffeescript ->
$(document).ready ->
id = @myVar
coffeescript ->
$(document).ready ->
id = "#{@myVar}"
我已经在脚本 -> 函数中编写了一些快速的 javascript(因为它只是一个字符串,我可以轻松地插入变量),所以我已经解决了它,但 coffeescript 的方式会更干净。在浏览器端丢失范围是有道理的 - 我只是想弄清楚如何做到这一点。
我想"script -> 函数"的意思是:
doctype 5
html ->
body ->
h1 "Hello world."
script "myvar = "#{@myvar}""
coffeescript ->
console.log myvar
至少这是一个黑客解决方法。它也可以与对象一起完成,通常使用 JSON 或类似方法进行序列化。
但我不会将其归类为"干净的咖啡脚本方式",所以我想这个问题仍然存在!
只是详细说明一下;这里的问题是我们在两个上下文中执行 coffeescript 代码;一个在服务器上生成要发送到客户端的 HTML,另一个在客户端本身上通过 coffeescript ->
构造的上下文。
服务器端知道局部变量和类似内容,因此对于在服务器上运行的代码,评估基于 coffeescript 的模板并将模板变量替换为值和类似值很简单。
客户端上不是这样。首先,客户端对局部变量/模板变量一无所知,它只看到页面呈现服务器端时包含的任何变量。在 coffeescript 构造中执行简单的模板扩展也不起作用,因为 coffeescript 不知道您是引用客户端上的局部变量还是服务器上的模板变量。理论上,也可能有特殊的序列来表示"在coffeescript代码中扩展模板变量",但是我们只是 - 再次 - 在咖啡杯之上创建新的模板语言。当然,它可以看起来像普通的咖啡脚本,例如 serverLocal(SOMEREF)
,其中 SOMEREF 将被替换为相应的值。
从理论上讲,Coffeecup可以支持一个结构,该结构将所有(或选择的)局部变量共享为客户端访问的变量,使用类似于我上面展示的script
黑客的"hack",并且它可能不会有太大的不同,除了使用JSON或类似方法支持比简单字符串更多的数据。