我在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,但它们也都失败了。有什么想法吗?
发布于 2012-05-18 04:34:55
您可以尝试传入haml上下文。我不知道这是否会起作用,是否能满足你的目的,但这只是一个想法(我没有办法测试它)。
- class Whatever
- def self.write(ctx)
- ctx.haml_concat "something"
- Whatever.write(self)如果这确实有效(同样,我真的不知道),您还可以尝试将上下文作为任意类级别的实例变量进行传递,这样您就可以使用任意编写器,而不必每次都传入haml上下文。
发布于 2012-05-18 04:37:47
试试这个:
- @self = self
- class Whatever
- def self.write
- @self.haml_concat "something"
- Whatever.write但是,again,HAML是一种标记语言,您不应该在其中声明类。这也违背了MVC的原则。
发布于 2012-05-18 06:45:20
传递这个东西本身不是更容易吗?
= "something #{@my_object.my_method}"
= @my_object.my_other_method我遗漏了什么?我不清楚你想要实现什么。
https://stackoverflow.com/questions/10642984
复制相似问题