2017-04-03 33 views
2

在下面的SASS代码片段中,我想检查地图是否有特定的关键字。如果没有,则返回(在这种情况下#bbb检查萨斯地图中的值是否存在

@function contains($list, $var) { 
    @return (false == index($list, $var)); 
} 

$colors: (aaa: #aaa, bbb: #bbb); 

$out: if(contains($colors, aaa), map-get($colors, aaa), #bbb); 

body { 
    color: $out; 
} 

出于某种原因,它总是返回#bbb默认值。任何建议我在这里做错了吗?

+0

您是否考虑过使用像Grunt这样的任务管理器来添加预处理编译来做到这一点? – Korgrue

+0

我创建CSS主题,我需要覆盖默认值。并且主题并不总是覆盖特定的值,为什么我需要检查 –

+0

然后否,SASS需要编译 - 因此无法让JS在部署环境中看到您的SASS。这必须在预处理中完成。 – Korgrue

回答

4

的第一个问题是,返回值是null如果找不到值:

@function contains($list, $var) { 
    @return (null == index($list, $var)); 
} 

第二个问题涉及您的包含功能的语义。通常被称为函数包含应该返回true,如果该值已经在列表中找到并否则为false(至少我预计):

@function contains($list, $var) { 
    @return (null != index($list, $var)); 
} 

再有就是与地图上调用index function第三个问题。你将不得不通过一个键值对不只是重要的关键功能:

$out: if(contains($colors, aaa #aaa), map-get($colors, aaa), #bbb); 

现在按预期工作,但为了完整起见,让我告诉你,已经有一个内置的功能,正是你试图用你的contains功能实现的; map_has_key($map, $key)

$out: if(map-has-key($colors, aaa), map-get($colors, aaa), #bbb);