Binding.scala FXML:如何填充ObservableList属性
我有这样的代码:Binding.scala FXML:如何填充ObservableList属性,scala,javafx,binding.scala,Scala,Javafx,Binding.scala,我有这样的代码: val state = Var(initialState) // ... type SavedSearchCmb = ComboBox[SavedSearch] val savedSearchesCmb: Binding[SavedSearchCmb] = <SavedSearchCmb> <items> {state.bind.savedSearches} </items> </SavedSear
val state = Var(initialState)
// ...
type SavedSearchCmb = ComboBox[SavedSearch]
val savedSearchesCmb: Binding[SavedSearchCmb] =
<SavedSearchCmb>
<items>
{state.bind.savedSearches}
</items>
</SavedSearchCmb>
val state=Var(initialState)
// ...
键入SavedSearchCmb=组合框[SavedSearch]
val savedSearchesCmb:绑定[SAVEDSEARCCMB]=
{state.bind.savedSearches}
编译器抱怨
[错误]找到:Seq[com.dev1on1.timer.YouTrackAPI.SavedSearch]
[错误]必需:javafx.collections.ObservableList[com.dev1on1.timer.YouTrackAPI.SavedSearch]
[错误]
生成项目的正确方法是什么?根据:
只读列表属性是一个Bean属性,其getter返回java.util.list
的实例,并且没有相应的setter方法。只读列表元素的内容在处理时会自动添加到列表中
items
是SavedSearchCmb
的列表属性,但是,它不是只读的,因为有一个setter。因此,以前版本的Binding.scala确实会将savedSearches
的内容附加到items
属性,而是尝试通过setItems
将常量分配给items
也就是说,根据规范,Binding.scala以前的行为完全正确
FXML行为非常不方便
幸运的是,Binding.scala不必支持与Oracle的javafx.fxml.fxmloader
完全相同的语法
我决定打破规范,允许将数据绑定表达式的内容附加到任何列表属性,不管它是只读的还是非只读的
这一变化已包括在报告中。如果升级到Binding.scala 11.0.1,则应编译代码
我们可以做得比原来的FXML规范更好。这就是为什么您选择Binding.scala而不是javafx.fxml.fxmloader
谢谢。如果我有一个BindingSeq
,而不是一个Seq呢?我想我可以做.all.bind
,然后wrap?.all.bind
编译,但失去了部分更新的能力,所以理想情况下可以将BindingSeq转换为一个保留部分更新行为的可观察列表,有从Seq
和BindingSeq
到observeList
的自动转换。如果它不起作用,您能否最小化您的示例并在Binding.scala的问题跟踪器上报告它?
[error] found : Seq[com.dev1on1.timer.YouTrackAPI.SavedSearch]
[error] required: javafx.collections.ObservableList[com.dev1on1.timer.YouTrackAPI.SavedSearch]
[error] <items>