2012-04-13 3 views
0

Ich habe ein wenig gesucht, aber ich kann keine Informationen finden. Ich baue eine Anwendung innerhalb von Sinatra und verwende die coffeescript Templating Engine. Standardmäßig wird der kompilierte Code als solche eingewickelt:Sinatra Kaffeescripto --bar?

(function() { 
    // code 
}).call(this); 

Ich mag würde entfernen, dass die --bare Flag verwendet, so verschiedene Dateien Klassen zugreifen können und so weiter, dass ich zu definieren. Ich erkenne, dass es mehr Widerstand gegen Variablenkonflikte usw. bietet, aber ich arbeite hier an zwei Hauptteilen. Einer ist die Geschäftslogik und die Anordnung von Daten in Klassenstrukturen. Die andere ist die Ansichtsfunktionalität, die raphaeljs verwendet. Ich würde es vorziehen, diese zwei Stücke in getrennten Akten zu behalten. Da die beiden Dateien, die als solche umschlossen sind, nicht auf die Daten zugreifen können, funktioniert sie offensichtlich nicht. Wenn Sie jedoch eine bessere Lösung als die Option --bare finden, bin ich ganz Ohr.

Antwort

2

Bare Compilation ist einfach eine schlechte Übung. Jede Datei sollte nur die öffentlichen Objekte in den globalen Bereich exportieren, die für den Rest Ihrer App von Bedeutung sind.

# foo.coffee 
class Foo 
    constructor: (@abc) -> 

privateVar = 123 

window.Foo = Foo # export 

Foo ist jetzt weltweit verfügbar. Wenn dieses Muster nicht praktisch ist, sollten Sie vielleicht Ihre Struktur ein wenig überdenken. Wenn Sie auch Dinge exportieren müssen, verschachteln Sie und Namespace Dinge besser, so dass mehr Daten durch weniger globale Variablen ausgesetzt werden können.

+0

+1 zu diesem. Es gibt nichts Außergewöhnliches an dem in der Frage beschriebenen Szenario; Wenn Sie möchten, dass ein Objekt aus mehreren '.coffee'-Dateien sichtbar ist, fügen Sie es in einen globalen Namespace ein. –

1

stütze ich Alex 'Antwort, aber wenn Sie unbedingt das tun muss, glaube ich my answer to the same question for Rails 3.1 auch hier anwendbar ist: Legen Sie die Linie

Tilt::CoffeeScriptTemplate.default_bare = true 

irgendwo in Ihrer Anwendung.