Macros 在haml中创建宏以更改子元素或父元素

Macros 在haml中创建宏以更改子元素或父元素,macros,haml,Macros,Haml,我经常使用以下haml模式: %p.wording{:'data-wording-key' => 'some.key'} = Wording.fetch('some.key') 我想知道我是否可以创建一个帮助器或宏来编写它 %p{wording: 'some.key'} 并让它生成与第一个版本相同的HTML 哈姆有可能吗 另一个可以接受的方法是 %p = WordingMacro('some.key') 并让WordingMacro在父p标记上添加class和data属性。但

我经常使用以下haml模式:

%p.wording{:'data-wording-key' => 'some.key'}
  = Wording.fetch('some.key')
我想知道我是否可以创建一个帮助器或宏来编写它

%p{wording: 'some.key'}
并让它生成与第一个版本相同的HTML

哈姆有可能吗

另一个可以接受的方法是

%p
  = WordingMacro('some.key')
并让WordingMacro在父p标记上添加class和data属性。但这可行吗

另一个好方法是声明我自己的元素,比如

%p_with_wording('some.key')

并让它生成相同的html。但是,您能在haml中创建自己的元素,将参数传递给它们,然后更改它们的子元素吗?

据我所知,haml中没有宏,但您可以轻松地用haml使用的任何语言创建帮助器方法

另一个可能更适合这种情况的选项是使用局部搜索。将通用代码放入部分:

%p.wording{:'data-wording-key': key}
  = Wording.fetch(key)
然后在主haml文件中调用它:

= partial( :wording_partial, { key: 'one-key' } )
如果您使用的是sinatra。在rails中,它类似于:

= render_partial :wording_partial, locals: { key: 'one-key' }

部分呈现是用您使用的haml语言完成的-它不是haml本身的一部分。

我认为您的第一个代码块中有一个输入错误–在“data-wording-key”的开头有一个额外的冒号:?@matt Yes,corrected,thx