如何在循环中关闭容器?
我有一个产品列表,我想在产品Feed中展示广告。
我想要的东西:
Bla.. Bla.. Bla.. Adsense Stuff Bla.. Bla.. Bla.. Bla.. Bla..
在再培训局,我会:
Adsense Stuff
你怎么把它翻译成Haml或Slim?
我不想在两个循环中打破循环有两个原因:我不知道产品按页面计算,我有一些更复杂的代码,它使用与Rails cycle()
帮助器相同的HTML技巧。 所以,找到一个让它成为可能的技巧对我有很大的帮助。
Haml允许您在需要时将原始HTML写为输出。 虽然很奇怪,但你可以使用它来实现你的目标,就像你使用Erb一样:
TEMPLATE = ' .container - products.each_with_index do |product,index| - if index == 2 AdSense Stuff .product< = product ' require 'haml' products = %w[ cat box kitten shoes hounds ] puts Haml::Engine.new(TEMPLATE).render binding #=> #=> cat #=> box #=> #=> AdSense Stuff #=> #=> kitten #=> shoes #=> hounds #=>
缩进看起来很奇怪,但你可以看到你有两个容器,其中包含AdSense内容。
在HAML
-products.each_with_index do |product,index| .product= product -if index == 2 .ad= Adsense Stuff
我不打扰容器,只需设置css来处理产品和广告类。 (这也表明你有多个同名的id,这些应该改为类)。
- products.each_with_index do |product,index| .product = product - if index == 2 .ad= Adsense Stuff
这应该做到吗?
一个可能的Haml解决方案,使用surround
助手 :
.container -products.each_with_index do |product,index| .product=product -if index == 2 =surround "", "" do .add Adsense stuff
这有点像黑客,因为我们“假装”关闭并打开容器div; 哈姆知道我们还在其中。 出于这个原因,它还引入了一些重复,因为你必须在两个地方指定“容器”类(以及div可能具有的任何其他属性)。
这个解决方案与@ Phrogz的解决方案类似,但这有点“Haml-ly”,允许您使用Haml语法来定义add div。