0

有没有办法将变量值(显然只是为了读取)从应用程序传递到coffeekup视图(在zappa中)中的嵌入式coffeescript,例如:

.... @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(因为它只是一个字符串,我可以轻松地插入变量),所以我已经解决了它,但是咖啡脚本的方式会更干净。在浏览器端丢失范围是有道理的——我只是想弄清楚如何去做。

4

1 回答 1

2

我猜“脚本->函数”的意思是:

  doctype 5
  html ->
    body ->
      h1 "Hello world."
      script "myvar = \"#{@myvar}\""
      coffeescript ->
        console.log myvar

至少这是一个骇人听闻的解决方法。它也可以用对象来完成,通常使用 JSON 或类似的序列化。

但我不会将其归类为“干净的咖啡脚本方式”,所以我想这个问题仍然存在!

只是详细说明一下;这里的问题是我们在两个上下文中执行咖啡脚本代码;一个在生成要发送给客户端的 html 的服务器上,另一个在客户端本身上,通过在coffeescript ->构造的上下文中。

服务器端知道本地和类似的,因此对于在服务器上运行的代码,评估基于咖啡脚本的模板并用值和类似的替换模板变量很简单。

客户端不是这样。首先,客户端对本地/模板变量一无所知,它只看到页面在服务器端呈现时包含的任何内容。并且在coffeescript 构造中进行简单的模板扩展也不起作用,因为coffeescript 不知道您是引用客户端上的局部变量还是服务器上的模板变量。理论上,也可能有特殊的序列表示“在咖啡脚本代码中扩展模板变量”,但是我们只是 - 再次 - 在咖啡杯之上创建一种新的模板语言。当然,它可以看起来像普通的咖啡脚本,例如serverLocal(SOMEREF),其中 SOMEREF 将被替换为相应的值。

理论上,Coffeecup 可以支持一个共享所有(或选择的)本地变量的结构,也可以作为要在客户端访问的变量,使用类似于script我上面展示的 hack 的“hack”,它可能不会太不同,除了使用 JSON 或类似的东西来支持比简单字符串更多种类的数据。

于 2012-06-23T14:13:46.627 回答