HAML 如果定义?评估中间人数据文件中是否存在条目的语句
HAML If defined? statement evaluating whether entry exists in Middleman data file
我有一个 Middleman data file data/testimonials.yaml
:
tom:
short: Tom short
alt: Tom alt (this should be shown)
name: Thomas
jeff:
short: Jeff short
alt: Jeff alt (this should be shown)
name: Jeffrey
joel:
short: Joel short (he doesn't have alt)
name: Joel
它可以有默认的 "short" 文本或替代文本。对于一些推荐,我想在某些页面上使用替代文本,而在其他页面上使用 "short" 文本。
在我的 test.haml
中,我正在尝试编写 HAML 语句来检查替代文本是否存在。如果是,则应将其插入;如果没有,则应使用标准文本。
以下示例显示 data.testimonials[person].alt
正确引用数据中的信息,因为它可以手动插入。但是,当我在 if defined?
语句中使用相同的变量时,它永远不会 returns 为真。
Not-working 'if' way, because 'if defined?' never evaluates to true:
- ['tom','jeff','joel'].each do |person|
%blockquote
- if defined? data.testimonials[person].alt
= data.testimonials[person].alt
- else
= data.testimonials[person].short
Manual way (code above should return exactly this):
- ['tom','jeff'].each do |person|
%blockquote
= data.testimonials[person].alt
- ['joel'].each do |person|
%blockquote
= data.testimonials[person].short
结果是这样的:
我做错了什么?有什么方法可以使用条件语句来检查数据是否存在?
defined?
并没有真正做到你想要的。您可以将其保留,if
的计算结果将仅为 false
,因为 alt
的值将为 nil
。
所以就把
- ['tom','jeff','joel'].each do |person|
%blockquote
- if data.testimonials[person].alt
= data.testimonials[person].alt
- else
= data.testimonials[person].short
或者你实际上可以写得更短:
- ['tom','jeff','joel'].each do |person|
%blockquote
= data.testimonials[person].alt || data.testimonials[person].short
我真的不确定,为什么 defined?
不起作用,但通常你不需要检查它的方法,因为未定义的值只会给你一个 nil
在中间人。
我有一个 Middleman data file data/testimonials.yaml
:
tom:
short: Tom short
alt: Tom alt (this should be shown)
name: Thomas
jeff:
short: Jeff short
alt: Jeff alt (this should be shown)
name: Jeffrey
joel:
short: Joel short (he doesn't have alt)
name: Joel
它可以有默认的 "short" 文本或替代文本。对于一些推荐,我想在某些页面上使用替代文本,而在其他页面上使用 "short" 文本。
在我的 test.haml
中,我正在尝试编写 HAML 语句来检查替代文本是否存在。如果是,则应将其插入;如果没有,则应使用标准文本。
以下示例显示 data.testimonials[person].alt
正确引用数据中的信息,因为它可以手动插入。但是,当我在 if defined?
语句中使用相同的变量时,它永远不会 returns 为真。
Not-working 'if' way, because 'if defined?' never evaluates to true:
- ['tom','jeff','joel'].each do |person|
%blockquote
- if defined? data.testimonials[person].alt
= data.testimonials[person].alt
- else
= data.testimonials[person].short
Manual way (code above should return exactly this):
- ['tom','jeff'].each do |person|
%blockquote
= data.testimonials[person].alt
- ['joel'].each do |person|
%blockquote
= data.testimonials[person].short
结果是这样的:
我做错了什么?有什么方法可以使用条件语句来检查数据是否存在?
defined?
并没有真正做到你想要的。您可以将其保留,if
的计算结果将仅为 false
,因为 alt
的值将为 nil
。
所以就把
- ['tom','jeff','joel'].each do |person|
%blockquote
- if data.testimonials[person].alt
= data.testimonials[person].alt
- else
= data.testimonials[person].short
或者你实际上可以写得更短:
- ['tom','jeff','joel'].each do |person|
%blockquote
= data.testimonials[person].alt || data.testimonials[person].short
我真的不确定,为什么 defined?
不起作用,但通常你不需要检查它的方法,因为未定义的值只会给你一个 nil
在中间人。