2014-11-17 3 views
0

php-less 컴파일러에서 전달 된 변수를 기반으로 "전역"변수를 재정의하려고합니다.mixin 함수 내에서 전역 변수 덮어 쓰기

제가 잘못한 일을하고 있는지, 아니면 범위 때문에 불가능한 것인지 확실하지 않습니다.

편집 :이 경우에는 신체의 배경이 붉어 지려고합니다.

external.less

// From external less stylesheet that I can't/don't want to modify 
@myColour: blue; 

body { 
    background: @myColour; // always blue 
} 

my.less

@import "external.less" 

// My styles 
.setResponsive(@responsive) when (@responsive = on) { 
    @myColour: green; 
} 
.setResponsive(@responsive) when (@responsive = off) { 
    @myColour: red; 
} 

@responsiveState: off; // actually being set from compiler 
.setResponsive(@responsiveState); 

div { 
    .setResponsive(@responsiveState); 
    background: @myColour; // red 
} 

http://codepen.io/anon/pen/gbOymJ

+0

죄송를 (당신이 @responsiveState을 설정하는 데 사용하는 동일한 메커니즘을 사용하여) 코드의 끝에서 모든 변수를 다시 선언해야입니다 'div'? 빨간색이 아닌가요? – Harry

+0

죄송합니다.이 경우 BODY의 배경이 빨간색이 될 것으로 예상합니다 – brightemo

+1

[여기]와 같이 이름이없는 네임 스페이스 ('&')를 사용하는 옵션이 있습니다 (http://codepen.io/hari_shanx/pen/ mydgMg). 그러나 이것이 유일한/최선의 선택인지는 확실하지 않습니다. 다른 더 좋은 대답이 없다면 이것을 답으로 추가하겠습니다. – Harry

답변

0

당신이 사용하고있는 Mixins as Functions : 발신자 범위에 직접 정의

변수 수 없음 재정의되어야한다.

상황에 따라 @myColour: blue;.setResponsive(@responsiveState);은 동일한 범위 (기본 범위)에 있습니다. 그래서 당신이 시도하는 것은 불가능합니다.

, 당신은의`background`에 대한 기대 값을 무엇

당신은