2017-04-03 51 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);