【问题标题】:How to access sinatra class variable in coffeescript template如何在咖啡脚本模板中访问 sinatra 类变量
【发布时间】:2011-10-13 05:25:46
【问题描述】:

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

在 sinatra 文档中,据说模板在与调用该模板的 rout 相同的范围内进行评估。

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

server.rb

require "sinatra"
require "coffee-script"

get '/app.js' do
  @str = "Hello"
  coffee :app
end

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

【问题讨论】:

    标签: ruby sinatra coffeescript


    【解决方案1】:

    只有当您使用 erb 之类的东西处理咖啡源文件时才有可能。因此,如果您使用 Rails 资产管道,您只需将 .erb 附加到文件扩展名,文件将在发送到咖啡之前使用 erb 进行处理,我认为在 sinatra 中您必须自己包装类似的东西。

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

    P.S:从应用程序的不同层访问变量无论如何都是个坏主意。

    编辑

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

    class <%= @magic %>
        doSomthing: ->
            console.log "hello"
    

    在你的控制器中添加实例变量

    @magic = "Crazy"
    

    Rails首先处理erb文件并生成

    class Crazy
        doSomething: ->
            console.log "hello"
    

    其次,它处理生成的咖啡脚本文件

    var Crazy;
    Crazy = (function() {
      function Crazy() {}
      Crazy.prototype.doSomething = function() {
        return console.log("hello");
      };
      return Crazy;
    })();
    

    这就是为什么它被称为资产管道。更传统地,你可以称之为 一个编译管道。如果您知道自己在做什么,您也许可以让 sprockets 与 Sinatra 一起运行。但是,如果您只使用 Rails 3.1,您的生活会更轻松 开始。

    【讨论】:

    • 感谢您花时间回答。也许你知道我如何将本地人传递给 CoffeeScript?文档对此只字未提。我最初认为 sinatra 会将咖啡模板视为类似于 haml 模板,因此可以创建与 html 相同的 js。
    • 看我的回答。您不能传递本地人,但您可以在编译之前使用模板引擎预处理咖啡脚本源代码
    • iafonov 和 bradgonesurfing,非常感谢!我发现可以做一些类似“coffee(erb :app)”的事情,并将 ruby​​ 代码嵌入到咖啡脚本中,例如“”。就像你说的 iafonov。唯一的缺点是“views”文件夹中的文件需要被称为“app.erb”,恕我直言隐藏文件的真实性质 - 这就是为什么我已经破解了我的本地 sinatra gem 并添加了新选项“:preprocess”,现在我可以做类似:“coffee :app, :preprocess => :erb”并将模板文件保存为“views/app.coffee.erb”。就像 bradgonesurfing 描述的那样工作。更好更清洁。
    【解决方案2】:

    我是为 Rails 写的:https://github.com/ludicast/ice

    但它可以很容易地适应 Sinatra。

    它允许您在 Rails 应用程序中使用 Eco 和 CoffeeKup 模板,并将 ruby​​ 模型暴露给 Coffeescript。

    内特

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 2016-08-23
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多