如何在coffeescript模板中访问sinatra类变量

K. *_*icz 3 ruby sinatra coffeescript

如何从coffeescript模板中访问ruby实例变量?

在sinatra文档中,它表示模板在与调用该模板的路径相同的范围内进行评估.

所以,我有以下sinatra应用程序:

server.rb:

require "sinatra"
require "coffee-script"

get '/app.js' do
  @str = "Hello"
  coffee :app
end
Run Code Online (Sandbox Code Playgroud)

在views/app.coffe文件中我想使用@str变量.可能吗?如果是这样,我如何访问@str变量?

iaf*_*nov 6

只有当你用像erb这样的东西处理咖啡源文件时才有可能.因此,如果您使用rails资源管道,您只需将.erb附加到文件扩展名,然后在将文件发送到咖啡之前使用erb处理该文件我认为在sinatra中您必须自己包装类似的内容.

这个想法将接近这一点 - http://www.sinatrarb.com/intro#Textile%20Templates

PS:无论如何,从不同的应用层访问变量是个坏主意.

编辑

您在RAILS中有一个名为sprockets的gem驱动的amultistage模板编译过程.您从一个名为/app/views/foo/show.js.coffee.erb的文件开始

class <%= @magic %>
    doSomthing: ->
        console.log "hello"
Run Code Online (Sandbox Code Playgroud)

在控制器中添加实例变量

@magic = "Crazy"
Run Code Online (Sandbox Code Playgroud)

Rails首先处理erb文件并生成

class Crazy
    doSomething: ->
        console.log "hello"
Run Code Online (Sandbox Code Playgroud)

其次,它处理coffeescript文件以生成

var Crazy;
Crazy = (function() {
  function Crazy() {}
  Crazy.prototype.doSomething = function() {
    return console.log("hello");
  };
  return Crazy;
})();
Run Code Online (Sandbox Code Playgroud)

这就是它被称为资产管道的原因.通常,您可以将其称为编译管道.如果您知道自己在做什么,那么您可以使用Sinatra运行链轮.但是,如果你从一开始就使用Rails 3.1,那么你的生活会更容易.