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