问题标签 [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.
java - 绑定两个不同对象的 ObservableList。(没有 EasyBind)
上面我对我正在尝试做的事情有一个想法。
随着项目被添加和删除到 src 列表中,另一个列表也随之同步。src 列表中的每个项目都与另一个列表中的项目等效。当然,另一个列表包含来自 src 列表的“翻译”值。
许多人建议使用 EasyBind,但我想先了解如何手动执行此操作。
javafx - JavaFX:与多个 EasyBind 映射绑定的 BooleanBindings
这个问题在JavaFX: Disable multiple rows in TableView based on other TableView停止的地方更进一步。我想提出一个更笼统的话题,其他人也可以从中受益。
我也有两个表视图。当 table1 包含相同的对象时,我还想禁用 table2 中的一行。这是通过以下代码实现的:
现在我只希望在以下情况下禁用该行:
- table1 中产品的 SKU 也在 table2 中(现在可以使用)
- 表2中产品的金额为负数
我不知道如何查看金额,因为我需要与某个 SKU 关联的金额。如何在一个 BooleanBinding 中使用多个地图创建它?
任何帮助是极大的赞赏!
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 maps和JavaFX: Disable multiple rows in TableView based on other TableView。
java - 将 EasyBind 与 NumberProperty 的子类一起使用
在介绍 EasyBind 之前 -
介绍 EasyBind 之后 -
我对doubleValue()
部分感到有些不舒服。每次我combine
的一些子类时NumberProperty
,EasyBind 通过Number
而不是 ie Double
, Integer
, ...
有什么办法可以避免doubleValue()
吗?
scala - 将实例方法视为函数的简单语法
在 Java 中,我们可以这样做:
在哪里String::length
有效地将实例方法用作函数。Scala中是否有等效的形式?(并且通过扩展,在 Scala 中使用 EasyBind 的等效方法)
groovy - 多个实例的 Groovy 方法参考
我正在从 Java 迁移到 Groovy,并且遇到了方法引用问题。
在 Java 中,我可以这样做:
我想在 Groovy 中实现相同的功能。我试着做:
但我有一个例外,就f.apply
行了:
我知道我可以执行以下操作来获取实例方法的方法引用,但我想获取任何实例的通用方法。
我想用它来使用 EasyBind 库。它允许您选择带有函数引用的 JavaFX 属性。您可能有一个类和属性的层次结构,要选择它们,您可以这样做:
因此,当树中的任何值发生变化时,property
get 会更新为正确的值。
我可以替换为Bean.&method
并且{bean -> bean.method}
效果很好。在 Java 中, theBean::method
实际上是bean -> bean.method
.
java - TreeTableView 选择在源更改后包含空值
基本值列表由(变化的)谓词过滤。被FilteredList
映射到TreeItem
s,然后这个结果列表被用作根TreeItem
s 的孩子。
当在 上进行选择时TreeTableView
,然后谓词更改,访问所选项目会导致NullPointerException
.
在我看来,更改中包含的项目是null
. 这个粗略的概念是否存在设计缺陷?
这不会发生在类TreeView
和ListView
.
我尝试使用https://github.com/TomasMikula/EasyBind为映射生成 MCVE:
java - 使 JavaFX TableView 行不可选择和 NoFocusTraversable
我正在尝试制作 JavaFX Rows Unselectable
,NoFocusTraversable
但我没有这样做。下面是另一个问题的代码,你可以用它来玩。我添加了两条自定义线来制作一些行no focus traversable
。
虽然我无法制作某些行unselectable
,但有什么想法吗?
您将需要下载TomasMikula/EasyBind库(或注释上面的行并取消注释里面的底行RowFactory
)
代码来自(JavaFX:如何禁用 TableView 中的一行?) StackOverflow 答案:
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,则不会更新标签。
java - 绑定到 ObservableValue而不是带有 EasyBind 的 ObservableList
我有一个包含ModelItem
项目的主/详细信息面板。每个ModelItem
都有一个ListProperty<ModelItemDetail>
,每个ModelItemDetail
都有几个StringProperty
s。
在详细信息面板中,我想展示一个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()
是用模型中的一个替换后备列表,它没有提取器。