私の 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 メソッドは、行を追加する場所です