我读了Haml 文档,他们谈论pre标签和"保留空白".根据文档,pre默认情况下"保留空白",您需要使用~运算符输出标记的内容以使其正确呈现.按照推荐的做法,我有这个:
%pre
~ @calendar.main_template
Run Code Online (Sandbox Code Playgroud)
浏览器中的输出:
(这可能有点令人困惑 - 应用程序让用户操作Haml代码,所以我实际上在UI中显示Haml代码.)
%div
= events
Run Code Online (Sandbox Code Playgroud)
输出想要什么:
%div
= events
Run Code Online (Sandbox Code Playgroud)
我也试过用=而不是~.也尝试过%pre>,%pre<并且%pre><所有结果都相同.
有没有办法在Rails中创建一个应用程序模板,在HAML而不是ERB中生成视图?
应用程序模板:http://railscasts.com/episodes/148-app-templates-in-rails-2-3
如果没有,是否有任何插件/宝石可用于让我的所有生成器脚本输出HAML而不是ERB?
我<tr>在视图中有一个元素,我想在这个元素上动态添加类,具体取决于两个模型之间的关联(公司和包装之间的多对多).
结果应该是这样的
<tr class="pck1 pck3 pck5">
Run Code Online (Sandbox Code Playgroud)
在那里pck1,pck3并pck5与公司相关的包装.
我试图在页面上输出一些内联js.我真的不想将它添加到任何JS文件,因为它是如此aribtrary和一次使用.话虽这么说,我正在使用haml并尝试使用content_for,以便在从布局加载jquery之后放置JS.
问题是haml不喜欢缩进的多行文本(我认为)
我正在尝试执行以下操作:
=content_for :javascript do
$(function(){
$("#sell_tickets_here").live("vclick",function(){
if($(this).is("checked"))
$("#tickets_here").display("inline");
else
$("#tickets_here").display("none");
});
});
Run Code Online (Sandbox Code Playgroud)
在我的布局中,我有:
= yield(:javascript)
Run Code Online (Sandbox Code Playgroud)
如果我在content_for语句后只有1行,那么哪个实际有效.
我的HAML模板的帮助器我做错了什么?
def display_event(event)
event = MultiJson.decode(event)
markup_class = get_markup_class(event)
haml_tag :li, :class => markup_class do
haml_tag :b, "Foo"
haml_tag :i, "Bar"
end
end
Run Code Online (Sandbox Code Playgroud)
这是错误:
haml_tag outputs directly to the Haml template.
Disregard its return value and use the - operator,
or use capture_haml to get the value as a String.
Run Code Online (Sandbox Code Playgroud)
模板调用display_event,如下所示:
- @events.each do |event|
= display_event(event)
Run Code Online (Sandbox Code Playgroud)
如果我使用常规标记,它将扩展到以下内容
%li.fooclass
%b Foo
%i Bar
Run Code Online (Sandbox Code Playgroud) 请考虑这个例子:
- user_links_params = _user_link_params(current_user)
%a{ :'data-msgstore-path' => user_links_params[:'data-msgstore-path'],
:'data-user_id' => user_links_params[:'data-user_id'],
:class => user_links_params[:class],
}
/ too many html tags and stuff to fit in a simple link_to
Run Code Online (Sandbox Code Playgroud)
我很乐意将所有这些都放在一个简单的语句中,如下所示:
%a[_user_link_params(current_user)]
/ too many html tags and stuff to fit in a simple link_to
Run Code Online (Sandbox Code Playgroud) 我有一个相当强大的项目,其所有模板都在Slim和一个小Haml中实现.我正在考虑将项目转移到基于Node.js的结构(可能是在Tower.js或类似的东西上构建;也许是Meteor),但是我想继续使用Slim或Haml作为模板而不是转移到另一个模板发动机.
有没有人这样做或花时间弄清楚到目前为止如何实现这一目标,如果是这样,你的发现是什么?
我正在尝试测试Rails 之外的一些HAML模板的格式.我们的想法是在命令行或通过包含的Ruby文件传递一些实例变量,将模板呈现为标准输出.我尝试了几种不同的方法但没有成功,如下所述.
例如,给定以下两个文件:
HAML模板:"test.haml"
!!!
%h1 Testing HAML CLI
%p= @bar
%p= @baz
Run Code Online (Sandbox Code Playgroud)Ruby文件:"test.rb"
@foo = 'abc'
@bar = '123'
Run Code Online (Sandbox Code Playgroud)我希望调用haml -r ./test test.haml可以在标准输出上返回插值的HTML文件,但事实并非如此.相反,我只得到HTML:
<!DOCTYPE html>
<h1>Testing HAML CLI</h1>
<p></p>
<p></p>
Run Code Online (Sandbox Code Playgroud)
由于这不起作用,我也尝试以编程方式执行此操作.例如:
#!/usr/bin/env ruby
require 'haml'
@foo = 'abc'
@bar = '123'
engine = Haml::Engine.new(File.read 'test.haml')
puts engine.render
Run Code Online (Sandbox Code Playgroud)
具有完全相同的结果,例如只有没有变量插值的HTML.
显然,需要其他东西来让HAML使用其关联变量呈现模板.我宁愿通过传递参数或包含文件从命令行执行此操作.我应该如何从命令行调用HAML来实现它?
如果由于某种原因这是不可能的,我应该如何以编程方式调用HAML来执行插值而不依赖于Rails?
ruby haml interpolation instance-variables command-line-interface
我想知道是否有人遇到过任何haml-rails关于Rails 4.0中的宝石的障碍.有一个Rails Cast说有一些问题,但没有更多的提到这一点.在GitHub上托管的gem也没有明确提到对Rails 4.0的支持.那么这个状态是什么?
我创建了一个haml-partial,我想将其用作默认标头.渲染出来时,我可以选择给它一个块来替换默认内容的一部分.
我尝试过多种方法:
render partial: "partial", capture: do
# Don't really know why I tried this, Syntax error ofcourse.
render partial: "partial" do
# 'nil' is not an ActiveModel-compatible object. It must implement :to_partial_path.
render layout: "partial" do
# Works, but:
render layout: "partial"
# You invoked render but did not give any of :partial, :template, :inline, :file or :text option.
# So, it always needs the block
Run Code Online (Sandbox Code Playgroud)
还有其他我不知道的选择吗?