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

わかりましたので、問題を回避することができました。

ファイルから構成をロードし、それらを繰り返し処理し、それぞれに対して set() メソッドを呼び出す構成オブジェクトを app.rb に作成しました。これにより、config 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 に答える