Как получить доступ к переменной класса sinatra в шаблоне coffeescript - PullRequest
3 голосов
/ 26 июля 2011

Как я могу получить доступ к переменной экземпляра ruby ​​из шаблона coffeescript?

В документации sinatra сказано, что шаблоны оцениваются в той же области, что и rou, который вызывает этот шаблон.

Итак, яследующее приложение sinatra:

server.rb :

require "sinatra"
require "coffee-script"

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

и в файле views / app.coffe я хотел бы использовать переменную @str.Является ли это возможным?Если да, то как мне получить доступ к переменной @str?

Ответы [ 2 ]

6 голосов
/ 26 июля 2011

Это может быть возможно, только если вы обработаете исходный файл кофе чем-то вроде erb. Так что, если вы используете конвейер ресурсов rails, вы можете просто добавить .erb к расширению файла, и файл будет обработан с помощью erb перед отправкой его в кофе. Я думаю, что в sinatra вам придется завернуть что-то подобное самостоятельно.

Идея будет близка к этому - http://www.sinatrarb.com/intro#Textile%20Templates

P.S: доступ к переменным из разных уровней приложения в любом случае плохая идея.

EDIT

У вас есть многоэтапный процесс компиляции шаблона в RAILS, управляемый драгоценным камнем, называемым звездочками. Вы начинаете с файла, например, называемого /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 голос
/ 03 августа 2011

Я написал это для Rails: https://github.com/ludicast/ice

, но его можно легко адаптировать для Синатры.

Позволяет использовать шаблоны Eco и CoffeeKup внутри приложения Rails, а модели ruby ​​доступны для Coffeescript.

Nate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...