使用HAML的(故意)怪多行格式,我想在我的模板下面几行:
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', |
:foo4 => 'bar4', :foo5 => 'bar5' |
-# and
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', |
:foo4 => 'bar4', :foo5 => 'bar5' |
然而,它们不能相对于彼此运行起来,或者它们被读取为一个单一的多行块。
-# This fails:
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', |
:foo4 => 'bar4', :foo5 => 'bar5' |
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', |
:foo4 => 'bar4', :foo5 => 'bar5' |
并带有换行符分离,有趣的是,确实没有更好的:
-# This fails, too:
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', |
:foo4 => 'bar4', :foo5 => 'bar5' |
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', |
:foo4 => 'bar4', :foo5 => 'bar5' |
唯一的工作解决我发现是运行之间的Ruby代码一个空行。 这看起来很丑陋。
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', |
:foo4 => 'bar4', :foo5 => 'bar5' |
-
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', |
:foo4 => 'bar4', :foo5 => 'bar5' |
有更好的吗?
这是一个功能,而不是一个错误。 Haml的多块是故意笨拙 - 包括难以遵循一个又一个 - 因为几乎所有的,最好的时间把那个Ruby代码到一个帮手。 即使助手只调用一次,它会让你的模板更容易阅读。 例如:
def blatz_link
call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3',
:foo4 => 'bar4', :foo5 => 'bar5'
end
def blootz_link
call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3',
:foo4 => 'bar4', :foo5 => 'bar5'
end
然后在你的Haml的,只是做
= blatz_link
= blootz_link
这将是更容易阅读和理解。
如果你绝对必须遵循一个多块与另一个,只添加之间的评论:
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', |
:foo4 => 'bar4', :foo5 => 'bar5' |
-#
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', |
:foo4 => 'bar4', :foo5 => 'bar5' |
我遇到同样的问题,并为已经被这里提到的解决方法,以及怪异的(是的,这是奇怪)对于多线块HAML的行为咬了我好几次。 我知道这是故意的,它很可能意在迫使用户做出自己的代码更易于阅读。 然而,这是一个众所周知的事实,每个开发人员都有他自己的喜好,当涉及到结构的代码。 HAML是我知道(C,C ++,红宝石,蟒蛇,HTML等),试图强加这种限制的唯一语言。
调用怪异的多线处理功能,而不是一个错误,只是表明一个有缺陷的语言设计。 最后,它总是会在用户眼中的错误。 多行的支持是任何主流语言的基本特征,缺少此功能的只是普通annoing - 就像M $回形针,我相信也是为了引导用户的尝试。
话虽这么说,HAML是编写HTML一个极其紧凑和有用的语言。 我们这些谁(在某些情况下),喜欢的多线块会很喜欢这样至少可以提供某种配置选项来启用/禁用体面的多路块的支持 - 无论“容易阅读代码的语言设计师的个人定义的”。
直到我们到达那里,我想我们必须解决使用的语言“ - #”黑客...
你可以在你的助手使用块,产生任何有意义的。
module SomeHelper
def call_to_helper
foo = Foo.new
yield foo
# build your html here, using the foo object's attributes
end
class Foo
attr_accessor :foo1, :foo2, :foo3, :foo4, :foo5
end
end
现在您HAML:
= call_to_helper do |foo|
-foo.foo1 = 'bar1'
-foo.foo2 = 'bar2'
-foo.foo3 = 'bar3'
-foo.foo4 = 'bar4'
-foo.foo5 = 'bar5'
= call_to_helper do |foo|
-foo.foo1 = 'bar1'
-foo.foo2 = 'bar2'
-foo.foo3 = 'bar3'
-foo.foo4 = 'bar4'
-foo.foo5 = 'bar5'
这是一个黑客(排序),但你总是可以在你的第二,第三等在划线用的“=”一个“+”代替。
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', |
:foo4 => 'bar4', :foo5 => 'bar5' |
+ call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', |
:foo4 => 'bar4', :foo5 => 'bar5' |