2011-09-29 41 views
0

我试图创建一个自定义模板液标签是这样的:/tags/scriptloader.rb如何访问全球Sinatra配置里面自定义液体模板标签?

这个文件是(PROJECT_DIR):

class ScriptLoader < Liquid::Tag  
    def initialize(tag_name, filename, tokens) 
     super 
     @file = filename 
    end 
    def render(context) 
     settings.cdn_url << 'script/' << @file 
    end  
end 

Liquid::Template.register_tag('script', ScriptLoader) 

上面的代码是在一个外部文件位置在被包含在app.rb启动文件中。

虽然问题是设置变量为空,即使在使用set方法添加app.rb文件中的配置之后。

响应调用我的模板{%脚本 'MYFILE' %}时:

Liquid error: undefined method `cdn_url' for Sinatra::Application:Class 

任何意见或指导意见,将不胜感激!

谢谢!

回答

0

好吧,所以我设法解决了这个问题。

我在app.rb中创建了一个配置对象,它从文件加载配置文件,对它们进行迭代并为每个文件调用set()方法。这也将配置密钥=>值集存储在类常量哈希中。

我可以访问值,像这样:

class ScriptLoader < Liquid::Tag  
    def initialize(tag_name, filename, tokens) 
     super 
     @file = filename 
    end 
    def render(context) 
     MyObject::CONFIG[:cdn_url] << 'script/' << @file 
    end  
end