3

私の Web ページには、非同期的にサーバーに送信されるアイテム名をユーザーが入力するテキスト ボックスがあります。そのメッセージは CometActor に送信され、さらに追加情報が追加され、render メソッドで新しい行をページ上の既存のテーブルに非同期的に追加します。アイテムを追加するたびに、常に新しい行がテーブルの行ではなくテーブルの上に配置されます。その後、更新を押すと、テーブルに適切に配置されます。ここは

<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属性をから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>

于 2013-02-01T19:01:59.350 に答える