global-variable-exists是在Sass中触发错误

时间:2014-08-20 04:56:49

标签: sass compass-sass

我使用类似三元的语句来初始化Sass中的变量。这允许我将一些我的默认变量设置为与Zurb Foundation使用的相同的东西,但如果我决定不包括Foundation模块,那么事情就不应该落到他们的头上。

$nav-link-icon-color: if( global-variable-exists($topbar-link-color), $topbar-link-color, #fff) !default;

在我升级到Sass 3.4之后,这个工作正常。紧接着,我开始收到此错误:

error sass/style.scss (Line 20 of sass/partials/_navigation-icons.scss: $name: #ffffff is not a string for `global-variable-exists')
我检查时已初始化

$topbar-link-color。它是一个值为#fff的字符串,由Foundation声明如下:

$topbar-link-color: #fff !default;

我甚至尝试将未初始化的变量传递到global-variable-exists()

$nav-link-icon-color: if( global-variable-exists($happy-scrappy), $happy-scrappy, #fff) !default;

但Sass仍然讨厌这个:

error sass/style.scss (Line 21 of sass/partials/_navigation-icons.scss: Undefined variable: "$happy-scrappy".)

这对我来说很奇怪,因为global-variable-exists()的重点是,你知道,检查变量是否存在。似乎发送到global-variable-exists()的参数没有被正确解析,但我不知道。

我尝试卸载所有版本的Sass和Compass,然后重新安装,最后重新启动无济于事。我甚至还回到了之前使用的Sass 3.3.14,同样的错误仍然存​​在。

指南针1.0.1 Sass 3.4.0 基础5.3.3 ruby 2.0.0p481 赢7位64位

编辑:经过进一步的研究,我做错的方法是在sass 3.2.19和指南针0.12.2中工作。

1 个答案:

答案 0 :(得分:11)

"问题"因为您不正确地使用该功能而持续存在。 docs描绘了如何使用此功能的非常清晰的画面:

$a-false-value: false;
// global-variable-exists(a-false-value) => true

.foo {
  $some-var: false;
  @if global-variable-exists(some-var) { /* false, doesn't run */ }
}

看看没有变量传递给函数?这是因为它需要一个字符串,其中包含变量的名称,而不是变量本身。传入变量本身会破坏函数的目的:你不能将不存在的变量传递给函数或混合函数。

所以...只需删除$

$nav-link-icon-color: if( global-variable-exists(topbar-link-color), $topbar-link-color, #fff) !default;