2012-07-28 4 views
0

이것은 zappa/coffeescript newbie 질문입니다. mysql에서 수집하고 테이블이 아닌 div로 결과를 렌더링하는 스크립트를 작성하려고합니다. 단 하나의 행으로 작동합니다. 내 질문 템플릿을 사용하여 출력을 위해 전체 결과 배열을 전달하는 방법은 무엇입니까? 아래 코드 예제, 비판에 오신 것을 환영합니다, 감사 :Coffeescript/Zappa 렌더링 할 배열을 전달하는 방법

@post '/', (req, res) -> #POST FOR SHOWSTOCK 
    MysqlConnection = mysql.createConnection(
    ... 
) 
    MysqlConnection.connect() 
    .... 
    else 
     sql = "select art.artcode,art.artname, art.artsonst, groessen.colcode,groessen.artgrb,groessen.artwidth,groessen.artist,date_format(artoffdate,'%d-%m-%y') as mydate, groessen.soreason from groessen,art where groessen.artcode = art.artcode and art.artcode = " + MysqlConnection.escape(req.body.art.artcode) 
     MysqlConnection.query sql, (err, rows) -> 
     throw err if err 
     ... 
     exports.art = rows 
     ... 
    MysqlConnection.end 
    @redirect '/showstock' # 'back' or 'home'= "/" 



@get '/': ->  
    @render index: { 
    } 


@view index: ->  
    h1 img src: '/BW_AL_Logo_Blue.jpg', align:'left', alt:'Logo' , width:240, height:120, top:25, left:370 ,position:'absolute' 
    h2 style: "font-family:sans-serif;;position: absolute; top: 10px; width: 250px; left: 350px; height: 25px; background-color: white", 'XYZ Stock Information' 
    form method: "post", action: "/", -> 
    div "#Artcode", style: "position: absolute; top:60px; left:680px; width: 121px; height: 21px;", -> 
     input type: "text", name:"art[artcode]" 
    div "#Submit", style: "position: absolute; top:60px; left: 840px; width: 121px; height: 21px;", -> 
     input type: "submit", value: "Submit" 


@get '/showstock': ->  
    @render showstock: { 
    artname0: exports.art[0].artname 
    ... 
    } 


@view showstock: ->  
    h1 img src: '/BW_AL_Logo_Blue.jpg', align:'left', alt:'Logo' , width:240, height:120, top:25, left:370 ,position:'absolute' 
    ... 
    div style: "position: absolute; left: 10px; top: 195px; height: 400px; width:1200px; padding: 2px; border:2px solid gray;",-> 
    div "#colcode", style: "height: 3px;width:90px;float:left;",-> 
     b "COLOUR" 
     br() 
     @colcode0 
    div ... 

답변

1

여기 (http://zappajs.org/docs/crashcourse/에서) 통과 뷰 기능에 변수를 사용하는 방법은 다음과 같습니다 당신의 결과 집합의 행 반복에 관해서는

@get '/': -> 
    @render index: {foo: 'bar'} 

@view index: -> 
    @title = 'Inline template' 
    h1 @title 
    p @foo 

, 당신이 뭔가해야 할 것 : 정확한 세부 사항은 사용하는 템플릿 엔진에 의존

@view index: -> 
    for row in @foo.rows 
    div '', "#{row.itemno}: #{row.itemname}" 

을 (당신이 쓴 것과, Coffeecup처럼 보인다). Coffeecup 템플릿은 실제로 많은 편의 기능 (HTML 태그와 동일하게 명명 됨)이있는 Coffeescript 코드와 하위 트리를 렌더링하는 함수를 전달하여 "하위 트리"렌더링을위한 규칙이 있음을 명심하십시오. 따라서 데이터 객체를 반복 처리하려면 Coffeescript 코드를 작성하여 HTML 텍스트를 생성하는 Coffeecup 편리한 메소드를 호출하십시오.

데이터 세트가 클 수 있다고 가정하면 브라우저 리디렉션 (코드 제안과 같이)을 사용하면 한보기에서 다른보기로 데이터를 전달하는 적절한 방법이 아닙니다.

"showstock"함수의 코드를 요청/응답 변수를 전달하는 일반 멤버 함수로 리팩터링하는 경우 (Zappa가 이러한 함수를 암시 적으로 전달하지만 정확한 답변을 제공하기에 Zappa에 대해 충분히 알지 못함) 그리고 rows 객체는 그 함수가 렌더링 된 텍스트를 리턴하도록합니다. "/"처리기와 "/ showstock"처리기 모두에서이 메서드를 호출하면 코드를 복제하거나 거대한 데이터 개체를 HTTP 데이터 개체로 전달하지 않고도 다양한 사용 사례를 처리 할 수 ​​있어야합니다.

+0

감사합니다. Marius, 예, coffeekup, 내가 제안하고 코멘트를 따라 다시 실행하겠습니다. –