Scala 提升:刷新/重新加载代码段
我使用的是一个包含多个ID的AjaxSelect。通过选择一个id,该id的附加信息应显示在给定的表中,该表将由代码段生成。现在我想知道刷新列表的最佳解决方案是什么 HTML:Scala 提升:刷新/重新加载代码段,scala,lift,Scala,Lift,我使用的是一个包含多个ID的AjaxSelect。通过选择一个id,该id的附加信息应显示在给定的表中,该表将由代码段生成。现在我想知道刷新列表的最佳解决方案是什么 HTML: <table> <thead> <tr> <th>Name</th> <th>Type</th> </tr> </thead
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
</tr>
</thead>
<tbody>
<tr class="lift:MainScreen.cars">
<td><car:name /></td>
<td><car:type /></td>
</tr>
</tbody>
</table>
你应该使用和。非常好的例子可以在和中找到
使用WiringUI
时,每次更新valueCellcell
时,与WiringUI.apply(cell)
链接的内容都将更新。因此,它应该做到这一点
以下是您具体案例的示例:
HTML:
和你的一样
SCALA:
def doSelect(msg: NodeSeq) = {
SHtml.ajaxSelect(cars.map(i => (i.no.toString, i.no.toString + ". Car")),
Empty, {
selectedCar =>
controller.chooseCar(selectedCar.toInt)
// RELOAD TABLE
})
}
def cars(node: NodeSeq): NodeSeq = {
val cars = controller.chosenCarFamily.cars
cars match {
case null => Text("There is no items in db")
case game => game.flatMap(i =>
bind("car", node,
"name" -> car.name,
"type" -> car.type))
}
}
class MainScreen{
def doSelect(msg: NodeSeq) // same as yours
def cars = WiringUI.apply(controller.chosenCarFamily)(displayResult)
def displayResult(carFamily:CarFamily)(node: NodeSeq) ={
carFamily.cars match {
case null => Text("There is no items in db")
case game => game.flatMap(i =>
bind("car", node,
"name" -> i.name,
"type" -> i.type))
}
}
}
object Controller{
val selectedCar = ValueCell(1)
def chooseCar = sectectedCar.set
val chosenCarFamily = selectedCar.lift(car:Int => //Stuff to output the family)
}
我知道我的代码并不完美,主要是在“displayResult”功能中,所以如果你有任何建议,请评论或编辑我的答案。嗨,克里斯,谢谢你的回复,使用apply方法它是有效的,但事实上我认为这个解决方案并不适合我的问题。因为我在
controller.chooseCar(selectedCar.toInt)
中提交了所选的id,它将id保存在一个模型中,我想使用controller.chosenCar
方法获得所选的汽车,所以我将使用两个包含相同id的变量,这是不必要的。也许你可以将valueCell放入controller中?我没有您项目的总视图,但基本上,只要您在某处有一个valueCell,它就会工作。问题如下:当我从selectbox中选择一个项目时,控制器会将相应的id提交给模型。模型将保存一个“CarFamily”对象,其中包括一个汽车列表。当我使用controller.chosenCarFamily
时,我想生成一个CarFamily对象中所有汽车的列表,该列表应该通过选择框中所选的项目进行更新。也许您可以尝试查看ValueCell
中的函数lift
来生成一个单元格[list[Car]]。如果你想要一个更完整的解决方案,你能在你的代码中添加一种控制器
,这样我就能看到你真正在做什么吗?在功能车中,不是I.name
而不是car.name
?