如何从coffeescript模板中访问ruby实例变量?
在sinatra文档中,我们说模板的评估范围与调用该模板的路径相同。
所以,我有以下sinatra app:
server.rb :
require "sinatra"
require "coffee-script"
get '/app.js' do
@str = "Hello"
coffee :app
end
在views / app.coffe文件中我想使用@str
变量。可能吗?如果是这样,我如何访问@str
变量?
答案 0 :(得分:6)
只有当你用像erb这样的东西处理咖啡源文件时才有可能。因此,如果您使用rails资源管道,您只需将.erb附加到文件扩展名,然后在将文件发送到咖啡之前使用erb处理该文件我认为在sinatra中您必须自己包装类似的东西。
这个想法将接近这个 - http://www.sinatrarb.com/intro#Textile%20Templates
P.S:从不同的应用层访问变量无论如何都是坏主意。
修改强>
你在RAILS中有一个名为sprockets的gem驱动的amultistage模板编译过程。你从一个名为/app/views/foo/show.js.coffee.erb的文件开始
class <%= @magic %>
doSomthing: ->
console.log "hello"
在控制器中添加实例变量
@magic = "Crazy"
Rails首先处理erb文件并生成
class Crazy
doSomething: ->
console.log "hello"
其次,它处理coffeescript文件以生成
var Crazy;
Crazy = (function() {
function Crazy() {}
Crazy.prototype.doSomething = function() {
return console.log("hello");
};
return Crazy;
})();
这就是它被称为资产管道的原因。通常你可以称之为 编译管道。如果您知道自己在做什么,那么您可以使用Sinatra运行链轮。但是如果你刚刚使用Rails 3.1,你的生活会更容易 一开始。
答案 1 :(得分:1)
我为Rails写了这个:https://github.com/ludicast/ice
但它很容易适应Sinatra。
它允许您在Rails应用程序中使用Eco和CoffeeKup模板,并将ruby模型暴露给Coffeescript。
内特