0

これは zappajs/coffeescript 初心者の質問です。mysql から収集し、テーブルではなく div で結果をレンダリングするスクリプトを作成しようとしていますが、これまでのところ 1 行で動作します。私の質問では、テンプレートを使用して結果配列全体を出力する方法を教えてください。以下のコード例、どんな批判も歓迎します、ありがとう:

@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 ...  
4

1 に答える 1

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 について正確な回答を提供できるほどよく知りません) と行オブジェクトを渡します。 、その関数にレンダリングされたテキストを返すだけです。「/」ハンドラーと「/showstock」ハンドラーの両方からこのメソッドを呼び出すことで、コードを複製したり、巨大なデータ オブジェクトを HTTP データ オブジェクトとして渡そうとしたりすることなく、さまざまなユース ケースを処理できるはずです。

于 2012-07-28T13:36:55.320 に答える