これは、bootstrap/scala.js v1.1.1のオブジェクトTestModalの変更例です。確かにこれを行う他の方法もありますが、1つの解決策はフィールド定義をapply()の外に移動してフォームの外に移動することです。 このようにして、TestModal2オブジェクトの外で見ることができます。
object TestModal2 {
val modalInputValue = Var("10000000") // Better use string
val radioGroup = FormInput.radioGroup(FormInput.radio("Test1", "modal-title", "First radio"), FormInput.radio("Test2", "modal-title", "Second radio"))
val select = FormInput.simpleSelect("Plain select", "Option 1", "Option 2", "Option 3")
val multipleSelect = FormInput.simpleMultipleSelect("Multiple select", "Option 1", "Option 2", "Option 3")
val inputTextArea = FormInput.textArea("Money text area", rows := 1, modalInputValue.reactiveInput)
val selectedFile = Var("")
val inputFile = FormInput.file("Test file", onchange := Bootstrap.jsInput { input ⇒
val file = input.files.head
selectedFile.update(file.name)
window.alert(s"File selected: ${file.name}")
})
val form = Form(
FormInputGroup(FormInputGroup.label("Money"), FormInputGroup.addon("usd".fontAwesome(FontAwesome.fixedWidth)), FormInputGroup.number(modalInputValue.reactiveInput)),
radioGroup,
select,
multipleSelect,
inputTextArea,
inputFile
)
def apply()(implicit ctx: Ctx.Owner): Modal = {
Modal()
.withTitle(radioGroup.value, "/", select.selected.map(_.head), "/", multipleSelect.selected.map(_.mkString(" + ")))
.withBody(p("You won ", modalInputValue, "$"), p(form))
.withButtons(Modal.closeButton(), Modal.button("Take", Modal.dismiss))
}
}
たとえば、コーリングコードのどこかに入力します。この
TestModal2.modalInputValue.trigger(
println("modalInputValue = " + TestModal2.modalInputValue.now)
)
TestModal2.select.selected.trigger(
println("select = " + TestModal2.select.selected.now)
)
TestModal2.selectedFile.trigger(
println("selectedFile = " + TestModal2.selectedFile.now)
)
開いているダイアログで入力値がコンソール上ですぐに変化するのがわかります。
実際には、ブートストラップタグの追加をお勧めします。経験則として、ファサードは基礎をなすJSライブラリが行うことができるものだけを行うことができます。そして、私はブートストラップでこれを行うための最良の方法が何であるかは全く分かりません。 –
これは、Modalが完全に破棄された後にデータを処理しようとしている場合は、 'shown.bs.modal'イベントをフックしようとすることをお勧めします。それはうまくいくようです... –