2013-12-20 106 views
4

如何測試Sass功能是否存在?測試是否定義了Sass功能


我有一個使用自定義Sass功能的Sass軟件包。然而,紅寶石(例如libsass)外,該功能可以不定義和提供了一種回退:

url: if($bootstrap-sass-asset-helper, twbs-font-path('name.eot'), 'name.eot')

我想的$bootstrap-sass-asset-helper值設置爲取決於twbs-font-path是否被聲明真或假。

回答

10

薩斯的當前版本有function-exists功能。 Full example

.foo { 
    @if function-exists(myfunc) { 
    exists: true; 
    } 
    @else { 
    exists: false; 
    } 
} 

這是新功能,V3.3(2014年3月),所以你可能需要更新您的薩斯寶石利用它。

薩斯V3.3增加了其他存在測試過:

variable-exists($name) 
global-variable-exists($name) 
mixin-exists($name) 

More on Sass v3.3.

+0

這太好了,謝謝你的提示! 3.3看起來很棒 – glebm

6

Sass沒有這樣的功能。如果你需要,你可以捏造這樣的:

@debug if(foo() == unquote("foo()"), false, true); // false 

@function foo() { 
    @return true; 
} 

@debug if(foo() == unquote("foo()"), false, true); // true 

這工作,因爲當你調用一個不存在的功能,薩斯假定您可以撰寫有效的CSS(計算,線性漸變,ATTR,等等。)。發生這種情況時,你得到的是一個字符串。所以如果函數存在,你會得到函數的結果而不是字符串。所以foo() == unquote("foo()")只是檢查是否有字符串。

相關:Can you test if a mixin exists?

+0

感謝做傻事,你可以請詳細說明'FOO()==引文結束( 「富()」)' ? – glebm

+0

我修改了我的答案,我希望這是有道理的。 – cimmanon

+0

謝謝你的解釋!真棒和令人震驚的黑客:)將等待幾天才能接受,所以我可以附加賞金。 – glebm