2011-03-12 6 views
5

Desidero essere in grado di fornire agli utenti il ​​controllo completo e modificare il layout. Voglio anche che siano in grado di includere quali plugin javascript desiderano. Pertanto, ho dovuto creare un'interfaccia per consentire loro di farlo.Utilizzo di stylesheet_link_tag e javascript_include_tag di Rails in Liquid Drop

Per esempio, il codice HTML di default si presenta come una versione più complicata di questo:

<head> 
    <title>{{site.name}}</title> 
    ... 
    {{js_plugins.colorbox}} # this should return the necessary javascript and/or stylesheet tags 
</head> 

mio Liquid JsPlugins goccia è come questo:

class JsPluginsDrop < Liquid::Drop 
    include ActionView::Helpers::AssetTagHelper 
    ... 
    def colorbox 
    javascript_include_tag "/path/to/js" 
    end 
end 

Quando eseguo le mie specifiche, però, ottengo questo errore (nota che vedi @drop["colorbox-1.3.15"] quando il codice che ho fornito sopra agisce in modo diverso, tuttavia volevo semplificare il mio codice poiché non è questo il problema, è l'uso dello TagHelper che è il problema):

Failures: 
    1) JsPluginsDrop colorbox-1.3.15 should return the correct script tags 
    Failure/Error: @drop["colorbox-1.3.15"].stylesheets.should include("/jquery-plugins/colorbox-1.3.15/example1/colorbox.css") 
    undefined local variable or method `config' for #<JsPluginsDrop:0xcbfab38> 
    # ./app/drops/js_plugins_drop.rb:22:in `stylesheets' 
    # ./spec/models/js_plugins_drop_spec.rb:11 

Non mi sorprenderò se il problema è causato dal fatto che questo è separato dal mio ambiente Rails e il drop non ha accesso allo config di Rails. Dal momento che voglio ancora poter usare questi metodi di convenienza e :cache => true che danno, , come posso usare lo stylesheet_link_tag e javascript_include_tag da all'interno di una caduta, se è possibile a tutti?

risposta

2

Sembra che questo è possibile quando fatto in questo modo:

class MyDrop < Liquid::Drop 

    ... 
    def my_js_tag 
    helpers.javascript_include_tag '/some/thing' 
    end 
    ... 

    def helpers 
    @helpers ||= ActionController::Base.helpers 
    end 

end