2011-07-26 58 views
3

如何從coffeescript模板中訪問ruby實例變量?如何訪問coffeescript模板中的sinatra類變量

在sinatra文檔中表示模板在與調用該模板的路由相同的範圍內進行評估。

所以,我有以下西納特拉應用:

server.rb

require "sinatra" 
require "coffee-script" 

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

和意見/ app.coffe文件我想用@str變量。可能嗎?如果是這樣,我怎樣才能訪問@str變量?

回答

6

只有當你使用類似erb的東西處理咖啡源文件時纔有可能。因此,如果您使用rails資產管道,您可以將.erb附加到文件擴展名,並在將文件發送到咖啡之前使用erb處理文件。我認爲在sinatra中,您必須自己包裝類似的東西。

的想法將接近這一個 - http://www.sinatrarb.com/intro#Textile%20Templates

P.S:從應用的不同層次變量的訪問是不好的想法。

編輯

你有一個被稱爲鏈輪帶動寶石鋼軌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,則您的生活會更輕鬆。

+0

感謝您花時間回答。也許你知道我怎麼能把當地人傳給CoffeeScript?文檔沒有提到它。我最初雖然認爲sinatra會將咖啡模板類似於haml模板,所以可以創建與html相同的js。 –

+0

看到我的答案。你不能通過當地人,但你可以在編譯前用模板引擎預處理咖啡腳本源代碼 – iafonov

+0

iafonov和bradgonesurfing,非常感謝!我發現可以做一些類似於「咖啡(erb:app)」的東西,並將紅寶石代碼嵌入咖啡腳本中,例如「<%= @str %>」。就像你說的iafonov。唯一的缺點是,「views」文件夾中的文件需要被稱爲「app.erb」,恕我直言,隱藏文件的真實性質 - 這就是爲什麼我已經入侵我的本地sinatra寶石,並添加新選項「:preprocess」,現在我可以做是這樣的:「咖啡:應用程序,:預處理=>:ERB」並保存模板文件「意見/ app.coffee.erb」。像bradgonesurfing描述的工作。更好,更乾淨。 –

1

我寫這爲Rails:https://github.com/ludicast/ice

,但它可以很容易地適應西納特拉。

它允許您在Rails應用程序中使用Eco和CoffeeKup模板,並將Ruby模型暴露給Coffeescript。

Nate

相關問題