3

在我的网页中,我有一个文本框,用户在其中输入将异步发送到服务器的项目名称,该消息将发送到 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>
  })
}

刷新前的结果是 刷新结果前

刷新后的结果 刷新结果后

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

render 方法是我添加行的地方

4

1 回答 1

0

尝试将class属性从移动tbodytable

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

于 2013-02-01T19:01:59.350 回答