Scala 提升:刷新/重新加载代码段

Scala 提升:刷新/重新加载代码段,scala,lift,Scala,Lift,我使用的是一个包含多个ID的AjaxSelect。通过选择一个id,该id的附加信息应显示在给定的表中,该表将由代码段生成。现在我想知道刷新列表的最佳解决方案是什么 HTML: <table> <thead> <tr> <th>Name</th> <th>Type</th> </tr> </thead

我使用的是一个包含多个ID的AjaxSelect。通过选择一个id,该id的附加信息应显示在给定的表中,该表将由代码段生成。现在我想知道刷新列表的最佳解决方案是什么

HTML:

<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
时,每次更新valueCell
cell
时,与
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