我在Haml中定义了一个class
,我希望能够在这个类中使用Haml助手。例如:
- class Whatever
- def self.write
- haml_concat "something"
- Whatever.write
理想情况下,Whatever.write
会将"something"
输出到模板,但它只会以undefined method 'haml_concat' for Haml::Engine::Whatever:Class
失败。
完整的堆栈跟踪:
haml_test.haml:5:in `write': undefined method `haml_concat' for Haml::Engine::Whatever:Class (NoMethodError)
from haml_test.haml:8:in `block in render'
from /home/fraser/.rvm/gems/ruby-1.9.3-p125/gems/haml-3.1.4/lib/haml/engine.rb:191:in `eval'
from /home/fraser/.rvm/gems/ruby-1.9.3-p125/gems/haml-3.1.4/lib/haml/engine.rb:191:in `render'
from /home/fraser/.rvm/gems/ruby-1.9.3-p125/gems/haml-3.1.4/lib/haml/exec.rb:281:in `process_result'
from /home/fraser/.rvm/gems/ruby-1.9.3-p125/gems/haml-3.1.4/lib/haml/exec.rb:41:in `parse'
from /home/fraser/.rvm/gems/ruby-1.9.3-p125/gems/haml-3.1.4/lib/haml/exec.rb:21:in `parse!'
from /home/fraser/.rvm/gems/ruby-1.9.3-p125/gems/haml-3.1.4/bin/haml:9:in `<top (required)>'
from /home/fraser/.rvm/gems/ruby-1.9.3-p125/bin/haml:19:in `load'
from /home/fraser/.rvm/gems/ruby-1.9.3-p125/bin/haml:19:in `<main>'
如何让它正常工作?我尝试过同时使用extend
和include
Haml::Helpers
,但它们都失败了。有什么想法吗?
答案 0 :(得分:0)
您可以尝试传入haml上下文。我不知道这是否有效,如果它能满足你的目的,那就是它,但这是一个想法(我没有办法测试它)。
- class Whatever
- def self.write(ctx)
- ctx.haml_concat "something"
- Whatever.write(self)
如果这确实有效(再次,我真的不知道),你也可以尝试将上下文作为Whatever类级实例变量传递,这样你就可以使用你的Whatever编写器,而不必每次都传递haml上下文时间。
答案 1 :(得分:0)
试试这个:
- @self = self
- class Whatever
- def self.write
- @self.haml_concat "something"
- Whatever.write
但是,again,HAML是一种标记语言,你不应该在其中声明类。它也违背了MVC的原则。
答案 2 :(得分:0)
传递这个东西不是更容易吗?
= "something #{@my_object.my_method}"
= @my_object.my_other_method
我错过了什么?我不清楚你想要完成什么。