В (Scala) Lift, как отображать исходный HTML из шаблона при использовании Helpers.bind

Я новичок в Scala/Lift, и у меня возникают проблемы с отображением списка с необязательными «тегами» для каждого элемента.

Мой HTML-шаблон говорит

<lift:Items.list>
  <e:name>Rock</e:name><br />
  <e:warning><span style="color:#ff0000;">DANGER!</span></e:warning>
</lift:Items.list>

А на Items.scala у меня есть

def list(node : NodeSeq) : NodeSeq = {

  getItems flatMap( it => {

     Helpers.bind("e", node,
                  "name" -> { Text(it.name) },
                  "warning" -> { 
                      if (it.isDangerous) { <<INSERT HTML FROM TEMPLATE>> } 
                      else { Text("") }
                         }
                  )
  })
}

В некоторых случаях я хотел бы, чтобы содержимое тега "e:warning" отображалось дословно. Я уверен, что есть простой способ извлечь их из «узла», но я предполагаю, что у меня есть серьезные пробелы в моих знаниях о лифтах, потому что я не могу понять, как это сделать. Если бы кто-нибудь мог указать мне правильную процедуру, я был бы очень благодарен.


ОТВЕТ: Спасибо за совет. В итоге я структурировал свой код следующим образом:

    "warning" -> { (n : NodeSeq) => {
                  if (it.isDangerous) { n } else { Text("") }
                 }}

person esaulgd    schedule 18.12.2010    source источник
comment
Возможный дубликат: stackoverflow.com/questions/4404111   -  person Debilski    schedule 18.12.2010


Ответы (2)


Вы можете просто связать функцию с именем узла, которая принимает NodeSeq и возвращает NodeSeq.

E.g.:

def warning(in: NodeSeq): NodeSeq = doSomethingWith(in)

// ...

Helpers.bind("e", node, "warning" -> warning _)

Затем содержимое узла <e:warning> будет преобразовано и вставлено.

person Debilski    schedule 18.12.2010

Я не уверен в цели того, что вы пытаетесь сделать. Если вы хотите отобразить то или иное, используйте ChooseTemplate и Box.

person timothy    schedule 18.12.2010