0

class在 Haml 中定义了一个,我希望能够在这个类中使用 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>'

我怎样才能让它正常工作?我试过同时使用extendand include Haml::Helpers,但它们也都失败了。有任何想法吗?

4

3 回答 3

0

尝试这个:

- @self = self
- class Whatever
  - def self.write
    - @self.haml_concat "something"

- Whatever.write

但是,同样,HAML 是一种标记语言,您不应该在其中声明类。这也违反了MVC的原则。

于 2012-05-17T20:37:47.223 回答
0

传递事物本身不是更容易吗?

= "something #{@my_object.my_method}"
= @my_object.my_other_method

我错过了什么?我不清楚你想要完成什么。

于 2012-05-17T22:45:20.363 回答
0

您可以尝试传入haml上下文。我不知道这是否可行,不知道它是否适合您的目的,但这是一个想法(我没有办法测试它)。

- class Whatever
  - def self.write(ctx)
    - ctx.haml_concat "something"

- Whatever.write(self)

如果这确实有效(同样,我真的不知道),您还可以尝试将上下文作为 What 类级别的实例变量传递,这样您就可以使用您的 What writer,而不必每次都传递 haml 上下文。

于 2012-05-17T20:34:55.003 回答