我有这样的代码:
val state = Var(initialState)
// ...
type SavedSearchCmb = ComboBox[SavedSearch]
val savedSearchesCmb: Binding[SavedSearchCmb] =
<SavedSearchCmb>
<items>
{state.bind.savedSearches}
</items>
</SavedSearchCmb>编译器抱怨,
发现错误:必需的javafx.collections.ObservableListcom.dev1on1.timer.YouTrackAPI.SavedSearch : Seqcom.dev1on1.timer.YouTrackAPI.SavedSearch
生成项目的正确方法是什么?
发布于 2017-05-26 06:38:10
根据FXML规范
只读列表属性是Bean属性,其getter返回
java.util.List的实例,并且没有相应的setter方法。只读列表元素的内容在处理时会自动添加到列表中。
items是SavedSearchCmb的list属性,但是它不是只读,因为有一个setter setItems。因此,以前版本的Binding.scala确实将savedSearches的内容附加到items属性中,而是尝试通过setItems将Constants分配给items。
也就是说,根据规范,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。
https://stackoverflow.com/questions/44195066
复制相似问题