【问题标题】:global-variable-exists is triggering errors in Sassglobal-variable-exists 在 Sass 中触发错误
【发布时间】:2014-10-13 08:28:03
【问题描述】:

我正在使用类似三元的语句来初始化 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 萨斯 3.4.0 基础 5.3.3 红宝石 2.0.0p481 赢7 64位

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

【问题讨论】:

    标签: sass compass-sass


    【解决方案1】:

    “问题”仍然存在,因为您错误地使用了该功能。 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 */ }
    }
    

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

    所以...只需删除 $:

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

    【讨论】:

    • 非常感谢!那照顾了它。你说得对。我完全忽略了放弃美元的必要性。看来我不正确的做法是偶然地在指南针和 sass 的旧组合上工作。
    • 这也让我很困惑——我以为他们只是想插入变量名
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 2014-05-08
    相关资源
    最近更新 更多