【问题标题】:Coffeescript / Zappajs how to pass array to be renderedCoffeescript / Zappajs 如何传递要渲染的数组
【发布时间】:2019-02-26 18:32:12
【问题描述】:

这是一个 zappajs/coffeescript 新手问题,我尝试编写一个从 mysql 收集并使用 div 而不是表呈现结果的脚本,到目前为止只有一行。我的问题如何传递整个结果数组以使用模板输出?代码示例如下,欢迎批评,谢谢:

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

【问题讨论】:

    标签: coffeescript coffeekup


    【解决方案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 代码即可,调用 Coffeecup 便捷方法来生成 html 文本。

    假设您的数据集可能很大,使用浏览器重定向(如您的代码所示)并不是将数据从一个视图传递到另一个视图的正确方法。

    如果您将“showstock”函数中的代码重构为普通成员函数,并传递任何请求/响应变量(我看到 Zappa 隐含地传递了这些变量,但我对 Zappa 的了解不够,无法提供准确的答案)和一个行对象,只需让该函数返回呈现的文本。通过从“/”处理程序和“/showstock”处理程序调用此方法,您应该能够处理不同的用例,而无需复制代码或尝试将大量数据对象作为 HTTP 数据对象传递。

    【讨论】:

    • 谢谢 Marius,是的,coffeekup,我会按照你的建议和评论重做
    猜你喜欢
    • 2011-07-08
    • 2016-08-04
    • 1970-01-01
    • 2018-06-27
    • 2013-04-15
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    相关资源
    最近更新 更多