Tornadofx - 在构建时控制表视图行对象
Tornadofx - controlling tableview row object while build
我的要求有点类似于 Angular 为 HTML 网页提供的要求。
基本上在创建 table 时,您遍历记录列表以获取记录,然后我们可以根据 if 条件删除一行。像这样:
ng-repeat = "record in records"
ng-if = "record.Id != 0"
与 Tornadofx 类似,如果我想构建一个 table 视图,我会这样做:
tableview<Record>(recordList) {
//I want to remove row with the 0th recordId
column("Id", Record::Id)
column("First Name", Record::firstNameProperty)
column("Last Name", Record::lastNameProperty)
}
看到教程,我尝试了以下但没有成功:
val removeZeroId = booleanBinding(idProp, idProp) {
id != "0"
}
visibleWhen {
//compilation
Record::removeZeroId
}
如果我可以在 table 视图中查看行对象并对其执行操作,那将很容易。
坦率地说,我还没有清楚地了解 tornadofx 绑定,所以我可能缺少一些基本的东西。
您应该使用 SortedFilteredList
来过滤掉您不想要的项目。这使 UI 逻辑保持干净,因为您只对底层数据结构的视图进行操作。这与 Angular 非常不同,您必须在其中决定
在为要显示的每条记录绘制 table 行时了解这些内容。
SortedFilteredList
可以配置一个 predicate
函数,该函数传递一个记录,并需要一个布尔值来确定当前记录是否应该在列表中可见。
class MyView : View() {
val recordList = getYourListOfRecordsFromSomewhere()
val data = SortedFilteredList(recordList)
override val root = tableview(data) {
column("Id", Record::idProperty)
column("First Name", Record::firstNameProperty)
column("Last Name", Record::lastNameProperty)
}
init {
// Configure the filter predicate for the SortedFilteredList
data.predicate = { it.id != 1 }
}
}
另请注意,您可以随时更新过滤谓词。的变化
谓词将立即在显示的行中可见。
我的要求有点类似于 Angular 为 HTML 网页提供的要求。
基本上在创建 table 时,您遍历记录列表以获取记录,然后我们可以根据 if 条件删除一行。像这样:
ng-repeat = "record in records"
ng-if = "record.Id != 0"
与 Tornadofx 类似,如果我想构建一个 table 视图,我会这样做:
tableview<Record>(recordList) {
//I want to remove row with the 0th recordId
column("Id", Record::Id)
column("First Name", Record::firstNameProperty)
column("Last Name", Record::lastNameProperty)
}
看到教程,我尝试了以下但没有成功:
val removeZeroId = booleanBinding(idProp, idProp) {
id != "0"
}
visibleWhen {
//compilation
Record::removeZeroId
}
如果我可以在 table 视图中查看行对象并对其执行操作,那将很容易。
坦率地说,我还没有清楚地了解 tornadofx 绑定,所以我可能缺少一些基本的东西。
您应该使用 SortedFilteredList
来过滤掉您不想要的项目。这使 UI 逻辑保持干净,因为您只对底层数据结构的视图进行操作。这与 Angular 非常不同,您必须在其中决定
在为要显示的每条记录绘制 table 行时了解这些内容。
SortedFilteredList
可以配置一个 predicate
函数,该函数传递一个记录,并需要一个布尔值来确定当前记录是否应该在列表中可见。
class MyView : View() {
val recordList = getYourListOfRecordsFromSomewhere()
val data = SortedFilteredList(recordList)
override val root = tableview(data) {
column("Id", Record::idProperty)
column("First Name", Record::firstNameProperty)
column("Last Name", Record::lastNameProperty)
}
init {
// Configure the filter predicate for the SortedFilteredList
data.predicate = { it.id != 1 }
}
}
另请注意,您可以随时更新过滤谓词。的变化 谓词将立即在显示的行中可见。