我不知道如果我明白你正在嘗試做的,但你的代碼似乎是罰款(沒有測試它雖然),除此之外,沒有MAP-設置功能,但您可以創建一個或僅使用地圖合併(請點擊此處:http://oddbird.net/2013/10/19/map-merge/)。我希望有所幫助。
@update 1:我想我現在得到了你的問題,你想通過mixin傳遞參考,所以如果你有多個地圖,你可以發送一個你想要更新的混合,我不會「T認爲這是可能的,但因爲沒有參考保持,如果你需要更新你必須直接鏈接到它,因爲爲例變量,此作品(測試):
$obj: (
init: false
);
@mixin set($map) {
@if map_get($map, init) != true {
$obj: map-set($map, init, true) !global;
body {
background-color: #000;
}
} @else {
body {
background-color: #ff0000;
}
}
}
@include set($obj);
@include set($obj);
但是如果你參考$ map而不是$ obj (in this line $obj: map-set($map, init, true) !global;)
,那麼將會創建一個新的全局地圖(稱爲$ map)。每次你再次調用mixin時,它將被你作爲參數發送的地圖所取代。
@Update 2:我找到了一種方法來做到這一點,但你必須保持全球「的地圖地圖」,並且每次更新這個人的時候,你發送你想更新地圖的名稱作爲參數,所以我想出了下面的代碼,它的測試和精細的工作:)
@function map-set($map, $key, $value) {
$new: ($key: $value);
@return map-merge($map, $new);
}
$maps: (
obj1: (
init: false
),
obj2: (
init: false
),
);
@mixin set($prop) {
@if map_get(map_get($maps, $prop), init) != true {
$obj: map-set(map_get($maps, $prop), init, true);
$maps: map-set($maps, $prop, $obj) !global;
body {
background-color: #000;
}
} @else {
body {
background-color: #ff0000;
}
}
}
@include set(obj1); //black
@include set(obj2); //black
@include set(obj1); //red
@include set(obj2); //red
來源:自己
這就是爲什麼我所需的功能,http://sassmeister.com/gist/8b135117ebcee187c62d – magicspon 2014-11-04 23:48:17