【问题标题】:How to dynamically update a Jade element from client-side CoffeeScript?如何从客户端 CoffeeScript 动态更新 Jade 元素?
【发布时间】:2011-11-03 14:47:51
【问题描述】:

我正在尝试使用 SocketStream 动态更新值表。我有一个定义表格的 Jade 模板:

app.jade:

table
  thead
    tr
      th key
      th value
    tbody
      - var jadeItems = [{key:'Test',value:'3.1415'}, {key:'Test2',value:'2.1878'}]
      - each item in jadeItems
        tr
          td= item.key
          td= item.value

这适用于静态数据,现在我需要使其成为动态数据。我有客户端 CoffeeScript,它接收 SocketStream 消息,其中包含 JSON 格式的表的新值:

app.coffee:

SS.events.on('message', (message) ->
  jadeItems = JSON.parse(message)
)

我试图弄清楚如何将 Jade 中项目的 JSON 值替换为消息的内容,但“jadeItems”变量超出了客户端 CoffeeScript 的范围。

我能够将新的 JSON 填充到 Jade 元素中,但是我不确定如何在 Jade 中的“jadeItems”变量中获取该元素的值。

有人知道获取 Jade 元素值的 Jade 语法吗?或者有没有办法从客户端 CoffeeScript 中分配给 Jade 中定义的 items 变量? Jade 语法是否有可靠的参考资料?

【问题讨论】:

  • 澄清一下:您使用的是 Jade 客户端?
  • 哦,好问题。也许不吧?默认情况下,它是由 SocketStream 在 Views 目录中创建的。我认为它是按原样提供给客户的,但也许我错了。我对所有这些东西都很陌生,但对我所看到的感到兴奋。也许我可以从服务器端 CoffeeScript 更新它。
  • 是的,我认为 SocketStream 默认情况下不会在客户端执行 Jade。 main page 表示“发送到浏览器的初始 HTML 可以用 Jade 或纯 HTML 编写”(强调我的); this page 建议使用 jQuery 而不是 Jade 来执行您所描述的那种 Ajax 更新。该页面甚至回答了“为什么不使用 Jade 进行所有模板化?”的问题?
  • 非常感谢您的参考。我的赛车速度太快了,我需要阅读更多内容。但是您在下面的回答对我帮助很大。非常感谢!

标签: coffeescript publish-subscribe pug socketstream


【解决方案1】:

假设您使用 Jade 作为客户端模板库(这种情况很少见,但可能):

为了完全通过 Jade 进行 Ajax 更新,您必须重新渲染模板。你一定在做类似的事情(使用the docs here的例子)

fn = jade.compile template, options
fn locals

您应该做的是使 jadeItems 成为该 locals 对象的属性。所以而不是行

- var jadeItems = [{key:'Test',value:'3.1415'}, {key:'Test2',value:'2.1878'}]

在您的模板中,您将改为调用 Jade 渲染函数

locals = {jadeItems: [{key:'Test',value:'3.1415'}, {key:'Test2',value:'2.1878'}]}
fn locals

然后在你的 Ajax 函数中,你会写

locals.jadeItems = JSON.parse message
fn locals

使用新数据重新渲染您的模板。

更新:鉴于 cmets 对此问题的澄清,更直接的答案是:“只需使用 jQuery 从 Ajax 回调中操作 DOM。”这可能看起来像

SS.events.on 'message', (message) ->
  items = JSON.parse message
  html = ''
  for item in items
    html += "<tr><td>#{item.key}</td><td>#{item.value}</td></tr>"
  $('tbody').html html

(请注意,以上假设服务器响应经过清理且格式正确)。

【讨论】:

  • 你真的用这个拯救了我的培根。现在我将去学习它是如何工作的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 2012-07-15
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多