问题标签 [easybind]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
716 浏览

java - 绑定两个不同对象的 ObservableList。(没有 EasyBind)

上面我对我正在尝试做的事情有一个想法。

随着项目被添加和删除到 src 列表中,另一个列表也随之同步。src 列表中的每个项目都与另一个列表中的项目等效。当然,另一个列表包含来自 src 列表的“翻译”值。

许多人建议使用 EasyBind,但我想先了解如何手动执行此操作。

0 投票
1 回答
563 浏览

javafx - JavaFX:与多个 EasyBind 映射绑定的 BooleanBindings

这个问题在JavaFX: Disable multiple rows in TableView based on other TableView停止的地方更进一步。我想提出一个更笼统的话题,其他人也可以从中受益。

我也有两个表视图。当 table1 包含相同的对象时,我还想禁用 table2 中的一行。这是通过以下代码实现的:

现在我只希望在以下情况下禁用该行:

  1. table1 中产品的 SKU 也在 table2 中(现在可以使用)
  2. 表2中产品的金额为负数

我不知道如何查看金额,因为我需要与某个 SKU 关联的金额。如何在一个 BooleanBinding 中使用多个地图创建它?

任何帮助是极大的赞赏!

0 投票
0 回答
688 浏览

javafx - JavaFX:RowFactory 中的动态布尔绑定

这个问题在JavaFX: BooleanBindings in bind with multiple EasyBind maps停止的地方更进一步。

我想进一步扩展行工厂:在表 1 中,产品每行显示 1 件,因此 1 个产品对象可能有多行。现在我只想禁用一行,如果表 2 中的数量等于行的总和。例如:Product(SKU: P1)在table1中有三行(都代表金额1)。如果 Product(SKU: P1) 在 table2 中的数量 = -2,则需要在 table1 中禁用此产品对象的 2 行。仍然需要启用一个,不管三个中的哪一个。

我目前有以下代码:

哪里skuAmountLookup是:

这仅在总量为表 1 时禁用行。您可以更改amounts[SKUs.indexOf(row.getItem().getSKU())]0,这将在仅存在一种产品时禁用所有行。

我的问题是:如何更改行工厂以考虑另一行的 disableProperty?

有关其他信息,请参阅:JavaFX: BooleanBindings in bind with multiple EasyBind mapsJavaFX: Disable multiple rows in TableView based on other TableView

0 投票
1 回答
134 浏览

java - 将 EasyBind 与 NumberProperty 的子类一起使用

在介绍 EasyBind 之前 -

介绍 EasyBind 之后 -

我对doubleValue()部分感到有些不舒服。每次我combine的一些子类时NumberProperty,EasyBind 通过Number而不是 ie Double, Integer, ...

有什么办法可以避免doubleValue()吗?

0 投票
1 回答
56 浏览

scala - 将实例方法视为函数的简单语法

在 Java 中,我们可以这样做:

在哪里String::length有效地将实例方法用作函数。Scala中是否有等效的形式?(并且通过扩展,在 Scala 中使用 EasyBind 的等效方法)

0 投票
1 回答
1226 浏览

groovy - 多个实例的 Groovy 方法参考

我正在从 Java 迁移到 Groovy,并且遇到了方法引用问题。

在 Java 中,我可以这样做:

我想在 Groovy 中实现相同的功能。我试着做:

但我有一个例外,就f.apply行了:

我知道我可以执行以下操作来获取实例方法的方法引用,但我想获取任何实例的通用方法。

我想用它来使用 EasyBind 库。它允许您选择带有函数引用的 JavaFX 属性。您可能有一个类和属性的层次结构,要选择它们,您可以这样做:

因此,当树中的任何值发生变化时,propertyget 会更新为正确的值。

我可以替换为Bean.&method并且{bean -> bean.method}效果很好。在 Java 中, theBean::method实际上是bean -> bean.method.

0 投票
1 回答
340 浏览

java - TreeTableView 选择在源更改后包含空值

基本值列表由(变化的)谓词过滤。被FilteredList映射到TreeItems,然后这个结果列表被用作根TreeItems 的孩子。

当在 上进行选择时TreeTableView,然后谓词更改,访问所选项目会导致NullPointerException.

在我看来,更改中包含的项目是null. 这个粗略的概念是否存在设计缺陷?

这不会发生在类TreeViewListView.

我尝试使用https://github.com/TomasMikula/EasyBind为映射生成 MCVE:

0 投票
0 回答
579 浏览

java - 使 JavaFX TableView 行不可选择和 NoFocusTraversable

我正在尝试制作 JavaFX Rows UnselectableNoFocusTraversable但我没有这样做。下面是另一个问题的代码,你可以用它来玩。我添加了两条自定义线来制作一些行no focus traversable

虽然我无法制作某些行unselectable,但有什么想法吗?


您将需要下载TomasMikula/EasyBind库(或注释上面的行并取消注释里面的底行RowFactory

代码来自(JavaFX:如何禁用 TableView 中的一行?) StackOverflow 答案:

0 投票
1 回答
645 浏览

java - JavaFX 将 UI 绑定到嵌套类的属性

我有一个名为的类Passage,其中包含一个名为Action. 并Action包含一个SimpleStringProperty.

我想将该字符串属性绑定到 UI 标签。看起来这应该是一件简单的事情:

但是,Action有时可能为空。我尝试了以下方法:

然后,如果 Action 以 null 开始(因此标签以空白开始),然后将 Action 分配给非 null 的东西(即调用 setAction()),则标签不会更新以反映更改。

我需要让 Action 可观察吗?请参阅:绑定到可以为 null 的对象的 javafx 属性

上面的解决方案使用了我不熟悉的一元操作。所以我读了这篇有用的博客文章:http ://tomasmikula.github.io/blog/2014/03/26/monadic-operations-on-observablevalue.html

我尝试使用 EasyBind 进行此绑定。

我创建了一个ObservableAction包装 的新类Action,使其成为可观察的值(尽管我不确定我是否正确执行了此步骤):

然后我的 ViewController 中有以下代码(同样,不确定我是否正确地完成了此操作):

结果和我之前经历的一样:当它Action不为空时它工作得很好。但是,如果Action开始为 null 然后变为非 null,则不会更新标签。

0 投票
2 回答
2602 浏览

java - 绑定到 ObservableValue而不是带有 EasyBind 的 ObservableList

我有一个包含ModelItem项目的主/详细信息面板。每个ModelItem都有一个ListProperty<ModelItemDetail>,每个ModelItemDetail都有几个StringPropertys。

在详细信息面板中,我想展示一个Label将其文本绑定到并派生自ModelItemDetail当前选定的每个属性的文本ModelItem。最终值可能取决于其他外部属性,例如CheckBox在“详细信息”面板上选择了 a(即,如果选择了复选框,则 的值bProperty不包含在结果中)。

这个绑定完成了我想要的,使用Bindings.createStringBinding()

例如:

我最近发现了 EasyBind,我正在尝试用它替换一些 API 绑定。我找不到用 EasyBind 表达这种绑定的方法。显然,我的代码的主要问题是因为 selectedItem 是一个属性,所以我不能将其详细信息用作ObservableList,我必须坚持使用ObservableValue<ObservableList>>. 这不方便通过EasyBind.map(ObservableList)和链接转换EasyBind.combine(ObservableList),这似乎是实现此绑定的理想候选者。在某些时候,我考虑过创建一个本地 ListProperty 并通过 selectedItem 上的侦听器将其绑定到 selectedItem 的详细信息,但它看起来太冗长和不干净。

我试过像这样强制 EasyBind API:

但是我感觉最后一个getOrElse只是在初始化时被调用,并且在更改时不会更新selectedItem

我也尝试过ObservableList立即获得,但不能指望任何其他空列表:

我什至尝试使用EasyBind.subscribe来监听 selectedItem 的更改并重新绑定(对此不太确定,但我认为不需要重新绑定,一切都可以执行计算):

这部分有效,实际上它正在监听复选框更改,但奇怪的是只监听第一个更改。我不知道为什么(知道会很好)。如果我添加另一个 EasyBind.Subscribe订阅 checkbox.selectedProperty,它会按预期工作,但这也太冗长和不干净。如果我自己将 API 侦听器添加到 selectedItemProperty 并在那里执行绑定,也会发生同样的情况。

我使用 EasyBind 来表达这种绑定的动机正是摆脱了显式表达绑定依赖关系的需要,并尝试进一步简化它。我提出的所有方法都明显比 API 差,尽管我对它并不完全满意。

我对 JavaFX 还是很陌生,我正在努力解决这个问题。我想了解正在发生的事情,并找出是否有一种简洁而优雅的方式来表达这个使用 EasyBind 的绑定。我开始怀疑 EasyBind 是否没有为这个用例做好准备(顺便说一句,我认为这并不罕见)。不过,可能我错过了一些微不足道的东西。

这是一个 MVCE,显示了我尝试过的一些方法,并且 API 绑定按预期工作:

更新:我取得了一些进展。

以下代码工作正常,但神秘地仍然只听 CheckBox 上的第一个更改:

显然,我遇到麻烦的主要原因是因为我没有看到如何使用 EasyBind fluent APIObservableList从绑定电流中获取一个。selectedItem声明一个本地ListProperty并将其绑定到所选项目的我可以利用ListProperty成为ObservableList. 我认为 EasyBind 某处没有遵循。感觉类型信息在某处丢失了。我无法将所有这些变量放在最后一个代码中,我不明白为什么 EasyBind.map() 会ebDetailList在最后一个代码中接受,但不会接受obsList

那么,现在的问题是,为什么这个绑定只在第一次监听 CheckBox 事件?支持列表中的提取器ListProperty不执行任何操作。我想这obsList.bind()是用模型中的一个替换后备列表,它没有提取器。