0

我尝试使用带有when条件的 mixin 防护,但在编译过程中出现以下错误:

.mixin 未定义

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

.mixin(#008000);

当我删除when条件时,它会起作用。这里有什么问题?


问题是我们的less-files中有变量,这些变量是在一个编译过程中定义的。但是在另一个编译过程中,这个变量没有定义,因为我们需要一点点动态。

所以我必须检查变量是否已定义。当我重试时

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

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

.mixin(@testColor);

一切正常。但是当我删除testColor变量数组中的变量时,它会崩溃,因为它没有被定义。

4

1 回答 1

1

您的问题可能是因为您试图将@testColor不存在的变量 ( ) 作为参数传递给 mixin。尝试通过将以下行添加到您的 Less 文件的最顶部。

@testColor: none;

由于 Less 会延迟加载变量,如果在编译期间设置了应该覆盖none. 如果在编译期间没有设置变量,上述行仍然意味着该变量已定义并具有一些默认值。


Less中没有直接isnullisnotnull类型的函数。但是,您可以通过为 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);
}
于 2015-05-13T14:50:52.137 回答