提升框架:无法正确使用彗星渲染表格行

时间:2012-10-27 06:37:04

标签: lift

在我的网页中,我有一个文本框,用户在其中输入将异步发送到服务器的项目名称,该消息将被发送到CometActor,然后进一步向它添加其他信息,并在它尝试的渲染方法中以异步方式向页面上的现有表追加新行。每当我添加一个项目时,总是将新行放在表格而不是表格行上,之后如果我按下刷新它将被正确放置在表格中。这是

<table cellpadding="0" cellspacing="0" border="1" class="display" id="example">
    <thead>
      <tr>
        <th>#</th>
        <th>Name</th>
        <th>Time</th>
      </tr>
    </thead>
    <tbody class="lift:comet?type=ProvisionComet">
      <tr id="tr_content">
        <td></td>
        <td></td>
        <td></td>
      </tr>
    </tbody>
  </table>

LiftActor对象

object ItemsServer extends LiftActor with ListenerManager {
  private var items = Vector[Item]()
  private lazy val date: Box[Date] = DependencyFactory.inject[Date] // inject the date

  def createUpdate = items

  override def lowPriority = {
    case s: String => items :+= new Item(items.length + 1, s, date.map(_.toString));         updateListeners()
    case _ => None
 }
}
彗星演员

class ItemComet extends CometActor with CometListener {
  private var items = Vector[Item]()

  def registerWith = ItemsServer

  override def lowPriority = {
    case v: Vector[Item] => items = v; reRender()
  }

  def render = "#tr_content *" #> {
    items.map(i => {
      <td>{i.sNum}</td>
      <td>{i.itemName}</td>
      <td>{i.updatedTime.toString}</td>
  })
}

刷新前的结果是 Before refresh result

刷新后的结果 After refresh result

如何在不刷新的情况下获得正确的结果?

渲染方法是我添加行的地方

1 个答案:

答案 0 :(得分:0)

尝试将class属性从tbody移至table

<table class="lift:comet?type=ProvisionComet" cellpadding="0" cellspacing="0" border="1" class="display" id="example">
<thead>
  <tr>
    <th>#</th>
    <th>Name</th>
    <th>Time</th>
  </tr>
</thead>
<tbody >
  <tr id="tr_content">
    <td></td>
    <td></td>
    <td></td>
  </tr>
</tbody>