2012-09-24 3 views
5

저는 약간의 노드 응용 프로그램을 구축하고 Express와 Jade 및 Stylus를 사용하여 일부 기본 HTMl 페이지를 렌더링합니다.노드 app 변수가 스타일러스 파일로 전달되었습니다.

Node에서 생성 된 .styl 파일에 일부 변수를 전달하는 방법이 있는지 궁금했습니다. .styl 파일 내부에 변수를 정의 할 수 있다는 것을 잘 알고 있지만 더 동적이어야합니다. 특히 나는 db에 몇 가지 색상을 저장하는 쉬운 방법을 찾고 노드가 그 값을 가져온 다음 .styl 파일에 삽입하여 페이지가 렌더링 될 때이 변수가 전달되도록합니다. - 가능하지만 나는 세부 사항에 부족하다. 어떤 도움을 주셔서 감사합니다. 감사!

답변

6

Stylus API의 define() 기능을 사용하여 스타일러스 변수를 설정하고 JS 기능을 사용할 수 있습니다.

6

@ebohlman에게 감사드립니다. 그의 조언은 내가 궁극적으로 구현 한 것에 가깝습니다. app.configure을하고 난 정의가 컴파일 기능 (키 컴파일 사용하는 경우

'컴파일 : 기본적으로

내가 여기에 연결 미들웨어의 상단에이 작업을 수행하는 방법을 알아 내려고 노력하고 있었다 내가 생각 해낸 것입니다 ')과 같이 : 전 기능의 몇 만든 다음

app.use(require('stylus') 
    .middleware({ 
    src: app.root + '/app/public', 
    compile: compile 
    }) 
); 

: 다음

var stylus = require('stylus'); 
var mylib = function(style){ 
    style.define('themeColor1', function(){ 
    //call to the db that returns a color 
    color = 'blue'; 
    color = color ? color : 'orange'; 
    return new stylus.nodes.Literal(color); 
    }); 
}; 

var compile = function(str, path) {  
    return stylus(str) 
    .use(mylib); 
}; 

을 .styl 파일의 내부에서 내가 수행

background-color themeColor1(); 

themeColor1 함수의 삼항 연산자는 간단한 기본값과 재정의를 허용합니다. 예를 기반으로 API를 이해하는 데 다소 시간이 걸렸지 만 다른 사람들이 수행 방법을 알고 싶어하는 해결책이 될 수 있습니다. 누구든지이 접근 방식의 단점이 있다면 알려주십시오.

+0

문안이 가장 잘 작동하는 것 같습니다. –

+2

함수를 만들지 않고 노드에서 스타일러스로 변수를 전달하는 방법을 알고 계십니까? 나는 .define()에 대한 대답을 보았지만, 그것은 나를 위해 작동하는 것 같다. – qodeninja

+0

'Literal'이 예상대로 작동하지 않는다는 것을 발견했습니다.'Ident'를 사용해야했습니다. –

관련 문제