Binding.scala FXML:如何填充 ObservableList 属性



我有这样的代码:

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>

生成项目的正确方法是什么?

根据FXML的规范:

只读列表属性是一个 Bean 属性,其 getter 返回java.util.List的实例,并且没有相应的 setter 方法。只读列表元素的内容在处理时会自动添加到列表中。

itemsSavedSearchCmb的列表属性,但是,它不是只读的,因为有一个 setter setItems。因此,以前版本的 Binding.scala 确实将savedSearches的内容追加到items属性,而是尝试通过setItemsConstants分配给items

也就是说,根据规范,Binding.scala 之前的行为是提取正确的。


FXML 行为非常不方便。

幸运的是,Binding.scala不必支持Oraclejavafx.fxml.FXMLLoader的提取相同的语法。

我决定打破规范,允许将数据绑定表达式的内容附加到任何列表属性,无论它是否是只读的。

此更改已包含在 Binding.scala 11.0.1 中。如果升级到 Binding.scala 11.0.1,则代码应编译。

我们可以比原来的FXML规范做得更好。这就是为什么你选择Binding.scala而不是javafx.fxml.FXMLLoader

相关内容

  • 没有找到相关文章

最新更新