新手问题 谁能说说 haml 如何使用?它是怎么生成菜单显示的?

zhangyanan · 2013年11月25日 · 最后由 hz_qiuyuanxin 回复于 2013年11月28日 · 4667 次阅读

看代码,有点迷惑,不知道 haml 是怎么生成菜单的?是什么时候生成的?访问某个 controller 的某个方法时候,这个 controller 里面的 helper 的方法加载了吗?是什么时候加载 helper 里面的方法的?

跟 erb 一样,先了解 erb

rails 启动后加载 routes,访问的时候,routes 会找到对应的 controller,c 会 render 一个 view。 至于 M 和 helper,你让它在该出现的时候出现。

看看 sinatra,对 rails 理解有好处。

#2 楼 @liwei78 就是 helper 中的方法,不调用是不会加载的啦?

#4 楼 @zhangyanan 是的。你完全可以写一个错的东西放进去,rails 也不知道。直到 controller render 这个 view 的时候。。。。

#2 楼 @liwei78 老大,你能看看我的问题是什么吗?说说 haml,是不是如果没有对应的.html.erb,就会调用.html.haml?

#6 楼 @zhangyanan 不可能呀。

默认是 erb 引擎,这是 ruby 自己的 stdlib, http://ruby-doc.org/stdlib-1.9.3/libdoc/erb/rdoc/index.html, 就算没有 Rails,erb 照样可以用。

那么,你不告诉 Rails 用 haml 的 Engine,那么,它就用 erb 喽。

如何在 rails 中用 haml??

gem "haml-rails"

它的核心在这里

if ::Rails.version.to_s >= "3.1"
        config.app_generators.template_engine :haml
      else
        config.generators.template_engine :haml
      end

会不会有个疑问,为什么不是 gem 'haml'

因为,haml 这种 gem 是不依赖谁的,你完全可以自己用 haml 做点简单的页面。比如

haml.rb

require 'haml'
engine = Haml::Engine.new("%p Haml code!")
engine.render #=> "<p>Haml code!</p>\n"

然后 ruby haml.rb

#8 楼 @Rei gemifle 里有 haml,我把 new.html.erb,修改成 new.html.haml,在访问 new action 的时候,显示 template is missing,是什么意思?不是说没有 erb 就用 haml 代替吗?

#9 楼 @zhangyanan 正常来说可以的,不知道你那发生什么问题,没有代码也判断不了。

#10 楼 @Rei 我又加了一个 new.html.erb,显示这个页面了,是不是如果 erb 和 haml 同时存在,erb 优先显示。

#11 楼 @zhangyanan 这不确定,Rails 框架自带 erb,猜测它会先进入模板队列,可能会优先。

千万别用 haml 或 slim,对于后面来看的人,很痛苦!也包括自己。

乖乖用 erb

#13 楼 @hz_qiuyuanxin 那 haml 在什么情况下用最合适?

#14 楼 @zhangyanan 跟 erb 这种东西都属于同一类,用 erb 就行了,最接近 html 本来的模样。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号