Twirl повторяет поле формы только первые обновления кнопки

Я прикрепил изображение моего интерфейса, созданного с помощью следующего кода шаблона twirl:

@(interests:List[String],levelsForm: Form[ManyInterests],user:models.User)(implicit request: RequestHeader,messages: Messages)

@import helper._
@import play.api.Play.current


@import b3.vertical.fieldConstructor
@opts = @{ Seq("1"->"Not very passionate","2"->"A little passionate",
    "3"->"Moderately passionate","4"->"Very passionate","5"->"Extremely passionate") }

@main("Passion Levels",Some(user)) {
    <h3>For each of the previous entered interest and activities, please rate how passionate you are:
    </h3>
    @helper.form(action = routes.ResponseController.newPassion) {
    @interests.map { interest =>
            <span><b>@interest</b></span><br />
        @b3.radio(levelsForm("interestpassions"), options = opts,'_inline ->true)
    }
        @b3.buttonType("submit", 'class -> "btn btn-default"){Next}
    }
}

Радио-кнопки

Он генерирует правильное сопоставление переключателей для значения, извлеченного из запроса pgsql, но проблема, с которой я сталкиваюсь, заключается в том, что когда я нажимаю на ЛЮБОЙ переключатель, единственная строка, в которой отображаются изменения, - это самая первая строка. Таким образом, чтобы объяснить использование изображения, если я выберу "Очень страстный" для игры в футбол, радио-кнопка не отображает запись здесь, но выбор для первой страсти "s" меняется на "Очень страстный".

Я не уверен, как это исправить. Я использую play-bootstrap3, который отлично работает для всех моих других компонентов формы.

2 ответа

Это выглядит правильно. Ты используешь @b3.radio(levelsForm("interestpassions")... для всех ваших полей, поэтому все они привязаны только к одному полю формы - "процентным интересам".

Я не уверен насчет фреймворка 'play-bootstrap3', но в тривиальных помощниках по игровой форме вам нужно использоватьrepeat для генерации повторяющихся полей:

@helper.repeat(userForm("emails"), min = 1) { emailField =>

    @helper.inputText(emailField)

}

Спасибо... я в конечном итоге воспользовался подсказкой из блога в Интернете и пошел с этим кодом:

 @helper.form(action = routes.ResponseController.newPassion) {

        @for(i <- 0 to interests.length - 1) {
            @defining(i) { count =>
                @defining(interests(i)) { interest =>
                        <span><b>@interest.interest</b></span><br/>
                @b3.text(levelsForm("interestpassions["+count+"].interest"), 'value -> s"${interest.interest}")
                @b3.radio(levelsForm("interestpassions["+count+"].level"), options = Seq("1" -> "Not very passionate", "2" -> "A little passionate",
                    "3" -> "Moderately passionate", "4" -> "Very passionate", "5" -> "Extremely passionate"),'_label -> s"", '_inline -> true, 'value -> s"${interest.passionLevel}")
                }
            }
        }
        @b3.buttonType("submit", 'class -> "btn btn-default"){Next}
    }
}

Я использовал некоторые jQuery, чтобы скрыть текстовое поле ввода, так как это значение jsut извлекается из того, что пользователь ответил на предыдущий вопрос, как вопрос. поэтому ответ от предыдущего будет вставлен в качестве идентификатора для другой таблицы в pgsql. Я думаю, что мои определения класса дел были большей проблемой, чем сами шаблоны twirl.

Другие вопросы по тегам