新しい回答: Guard Expression Check を使用して Mixin を拡張する
私が理解しているように、名前空間をデフォルト値として使用できるようにしたいのですが、グローバルスコープにはまったく入りません。次のように mixin 定義を拡張する必要があると思います。
#namespace {
@nsColor: #333;
}
.testMixin1(@mixinColor: 'null') {
.mixin (@a) when (iscolor(@a)) {
background-color: @a;
}
.mixin (@a) when not (iscolor(@a)) {
#namespace;
background-color: @nsColor;
}
.mixin (@mixinColor);
}
次に、値なしまたは値付きで呼び出します。
.testMixin1();
.testMixin1(red);
出力 (値を設定するかどうかに基づく):
background-color: #333333;
background-color: #ff0000;
また
最初に述べたように、名前空間で「ゲッター」ミックスインを引き続き使用できます。
#namespace {
.getNsColor(){@nsColor: #333;} <-- changed here
}
.testMixin1(@mixinColor: 'null') {
.mixin (@a) when (iscolor(@a)) {
background-color: @a;
}
.mixin (@a) when not (iscolor(@a)) {
#namespace > .getNsColor(); <-- changed here
background-color: @nsColor;
}
.mixin (@mixinColor);
}
元の回答: 変数を Mixin 自体にバンドルする
変数を mixin 自体にバンドルすると、変数にアクセスできます。そう...
#namespace {
.getNsColor() {@nsColor: #333;}
}
.testMixin1(@mixinColor) {
background-color: @mixinColor;
}
次に、それを含めます...
1:グローバルに
#namespace > .getNsColor;
.selector {
.testMixin1(@nsColor);
}
または 2:ローカル
.selector {
#namespace > .getNsColor;
.testMixin1(@nsColor);
}
どちらも出力されます...
.selector {
background-color: #333333;
}