0

我正在尝试创建一个自定义 Liquid 模板标签,如下所示:

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)

上述代码位于外部文件位置: (project_dir)/tags/scriptloader.rb

此文件包含在 app.rb 启动文件中。

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

在我的模板中调用 {% script 'myfile' %} 时的响应:

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

任何想法或指导将不胜感激!

谢谢!

4

1 回答 1

0

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

我在 app.rb 中创建了一个配置对象,它从文件中加载配置,遍历它们并为每个配置调用 set() 方法。这还将配置 key=>value 集存储在类常量哈希中。

我可以访问这样的值:

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
于 2011-09-30T14:54:17.177 回答