我在互联网上搜索了一下,但没有找到比以下方式更好的方法:
Haml::Engine.new(IO.read("header.haml")).render
有没有更好的方法在HAML中包含所谓的partials?是否有我错过的现有过滤器或命令?
糟糕,你说得对 - 没有内置的方法。我已经使用了带有haml
命令行的辅助程序,但总是输出已经格式化为HTML的内容。
我最好的建议是编写一个partial()
方法并要求它。看起来你已经开始走这条路了。我建议任何编写此类函数的人考虑以某种方式保留原始绑定。 Haml :: Helpers#capture_hame似乎是实现这一点最简单的方法。
如果执行速度是一个问题,那么缓存一些解析模板可能也是一个好主意,就像Merb一样。
如果有人确实编写出了一些代码,请将其放在GitHub上,并在此处发表评论。
我终于找到了我要找的东西,所以我想和你分享我的发现。您可以简单地使用与Haml相同的语法,如第一次使用 - http://www.semicomplete.com/blog/geekery/partials-in-haml-in-sinatra.html
/views/file.haml
%h3 Title
%div= haml :content, :layout => false
/views/content.haml
%p your content here
我也遇到了同样的问题。我需要生成一些 HTML 片段来优化服务器响应,但是这些片段包含了很多计算(用于绘制图形),每当用户发送请求时都会进行不必要的操作。
由于我的视图已经被分成了几个 Haml 局部视图,我希望能够重用它们来生成 HTML 文件。
我的第一个尝试是使用 Haml 引擎,但是当我尝试渲染其他局部视图以及应用程序助手的一些功能时,它并没有起作用。
最终,我找到了一个解决方案,即通过在我想要创建 HTML 文件的模型中创建一个函数(to_html)来实现。下面是代码:
def to_html
ActionView::Base.send :include, ActionView::Helpers::ApplicationHelper
File.open(File.join(Rails.root, "public", 'test.html'), "w") do |file|
file.print ActionView::Base.new(Rails.configuration.paths["app/views"].first).render(
:partial => 'partial_folder/partial',
:format => :html,
:locals => { :model => self}
)
end
end
通过这种方式,我能够使用已经完成的部分来打印HTML文件。这对我很有效,也许对你有所帮助。
= partial "test.haml"
。它只进行了微不足道的逻辑处理,以尝试找到部分文件。require 'haml'
def find filename
return filename if File.exists? filename
path = File.dirname ARGV[0]
filename = path+"/"+filename
return filename if File.exists? filename
throw "Could not find file."
end
def partial filename
source = File.read(find(filename))
engine = Haml::Engine.new(source)
engine.render(binding)
end
puts partial ARGV[0]
你可以这样执行它:ruby hamlize.rb input.haml > output.html