我有这样的代码:
val state = Var(initialState)
// ...
type SavedSearchCmb = ComboBox[SavedSearch]
val savedSearchesCmb: Binding[SavedSearchCmb] =
<SavedSearchCmb>
<items>
{state.bind.savedSearches}
</items>
</SavedSearchCmb>
编译器抱怨,
[error] found : Seq[com.dev1on1.timer.YouTrackAPI.SavedSearch] [error] required: javafx.collections.ObservableList[com.dev1on1.timer.YouTrackAPI.SavedSearch] [error] <items>
生成项目的正确方法是什么?
答案 0 :(得分:1)
只读列表属性是Bean属性,其getter返回
java.util.List
的实例,并且没有相应的setter方法。只读列表元素的内容会在处理时自动添加到列表中。
items
是SavedSearchCmb
的列表属性,但是,它不是只读,因为有一个setter setItems。因此,以前版本的Binding.scala确实会将savedSearches
的内容附加到items
属性,而是尝试通过{Constants
将items
分配给setItems
{1}}。
也就是说,根据规范,Binding.scala的先前行为是完全正确的。
FXML行为非常不方便。
幸运的是,Binding.scala不必支持Oracle javafx.fxml.FXMLLoader
的抽象相同语法。
我决定打破规范,允许将数据绑定表达式的内容附加到任何列表属性,无论它是否为只读。
此更改已包含在Binding.scala 11.0.1中。如果升级到Binding.scala 11.0.1,则应编译代码。
我们可以做得比原始的FXML规范更好。这就是为什么你选择Binding.scala而不是javafx.fxml.FXMLLoader
。