2015-05-13 30 views
0

我嘗試使用混入警衛與when條件,但在編譯過程中出現了以下錯誤:呼叫混入如果變量定義

.mixin is undefined

.mixin (@color) when (isstring(@color)) { 
    //some code 
} 

.mixin(#008000); 

當我刪除了when條件它的工作原理。這裏有什麼問題?


問題是我們在一個編譯過程中定義的less文件中有變量。但是在另一個編譯過程中,這個變量沒有被定義,因爲我們需要一點動態。

所以我必須檢查變量是否定義。當我嘗試過來

$variables = [ 
    'testColor' => '#fff111', 
]; 
$lessc->setVariables($variables); 
$cachedCompile = $lessc->cachedCompile($publicPath . $inputFile); 

.mixin (@color:none) when (iscolor(@color)) { 
    color: #fff; 
} 

.mixin(@testColor); 

一切正常。但是當我在變量數組中刪除testColor變量時,它會崩潰,因爲它沒有被定義。

+0

如何定義mixin並沒有什麼不對,並且您肯定不會得到該錯誤。你可以檢查lesstester.com。除此之外,對顏色使用'isstring()'意味着mixin不會輸出任何內容,因爲條件失敗。 – Harry

+0

你也遇到錯誤'when(@color ='')'? – Manwal

+1

是的,主要的問題是我試圖修復一個mixin guard是否檢查變量是否被定義。還有另一種方法可以減少這種情況嗎? – user3314010

回答

1

您的問題可能是因爲您試圖將不存在的變量(@testColor)作爲參數傳遞給mixin。嘗試將以下行添加到Less文件的最頂部。

@testColor: none; 

由於更不是變量延遲加載,如果有編譯應該覆蓋none期間設置的值。如果在編譯過程中沒有設置變量,那麼上面的代碼行仍然意味着變量被定義並且有一些默認值。


沒有欠任何直接或isnull類型isnotnull功能。但是,您可以通過爲mixin分配默認值來模仿行爲。

在下面的示例中,我們將默認值指定爲none,它不是顏色,因此當檢查iscolor(@color)條件時,它會失敗,並且mixin不會產生任何輸出。

我還在下面添加了一個not條件,以便您查看差異。

.mixin (@color:none) when (iscolor(@color)) { 
    //some code 
    color: is defined; 
} 
.mixin (@color:none) when not (iscolor(@color)) { 
    //some code 
    color: is not defined; 
} 

#output1{ 
    .mixin(); 
} 
#output2{ 
    .mixin(#ff0000); 
} 
#output3{ 
    .mixin(abcd); 
}