2014-01-28 1 views
1

У меня есть запись класса, как это:Как создать поля с помощью CssBoundLiftScreen и записать в лифте?

class Address extends Record[Address] { 
    def meta = Address 

    object countryCode extends OptionalStringField(this, None) { 
    override def name = "Country" 

    var c = "" // this isn't doing anything but I set it up just to build the simple SHtml.select 
    override def toForm = Full(SHtml.select(List(("usa", "usa"),("ca", "ca")), Empty, c = _)) 
    } 
    ... 
} 

object Address extends Address with MetaRecord[Address] { } 

, а затем эта форма отображается следующим образом:

object FormPage extends CssBoundLiftScreen { 
    def formName = "MyForm" 

    val record = Address.createRecord 

    field(record.countryCode, FieldBinding("addressCountryCode") 
} 

в шаблоне, как это:

<div class="form"> 
    <div class="lift:FormPage"> 
    <div class="fields"> 
     <fieldset> 
     <div id="MyForm_addressCountryCode_field"></div> 
     </fieldset> 
    </div> 
    </div> 
</div> 

Является ли это право способ делать входы, отличные от простого текстового поля, используя Record/CssBoundLiftScreen? Кажется, что этот выбор не будет правильно обновлять или создавать запись. Как я могу выбрать, показывать значение поля записи?

ответ

1

Если посмотреть на scaladaoc для OptionalStringField, существует два способа, которые предоставляются через суперкласса SettableValueHolder и которые обеспечивают доступ к базовой стоимости: get и set

Защиту набор (в: Опция [ MyType]): Option [MyType]

Задайте значение поля для данного значения. Примечание. Поскольку установка поля может завершиться с ошибкой (возврат не заполнен), этот метод вернет defaultValueBox, если поле не может быть установлено.

прибудете: Опция [MyType]

получить значение

Я подозреваю, что что-то подобное должно работать для вас:

override def toForm = Full(SHtml.select(List(("usa", "usa"),("ca", "ca")), get, v => set(Some(v))))