Поднять: Обновить / Обновить фрагмент - PullRequest
1 голос
/ 30 января 2012

Я использую AjaxSelect, который содержит несколько идентификаторов.При выборе идентификатора дополнительная информация к этому идентификатору должна отображаться в заданной таблице, которая будет сгенерирована фрагментом.Теперь я хочу знать, какое было бы лучшее решение для обновления моего списка?

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>

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))
  }
}

1 Ответ

3 голосов
/ 31 января 2012

Вы должны использовать ValueCell и WiringUI . Очень хорошие примеры можно найти в simple_wiring и invoice_wiring .

При использовании WiringUI при каждом обновлении значения Cell cell содержимое, связанное с WiringUI.apply(cell), будет обновляться. Так что надо делать свое дело.

Вот пример для вашего конкретного случая:

HTML: То же, что и ваш

SCALA:

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)
}
...