以下问题由SCN上的这个SAPUI5主题驱动:2 dropdownboxs, filtering second off the the value in first
tablemodel
中,下拉列表的数据存储在命名模型metamodel
请参阅下面表格的示例:
为了能够过滤分部上的业务单位,命名模型metamodel
如下所示:
divisions: [
{
division : "div1",
divisiondesc: "Division 1"
},
{
division : "div2",
divisiondesc: "Division 2"
}, //etc
],
bunits: [
{
busunit : "bus1",
busunitdesc: "Business Unit 1",
division : "div1"
},
{
busunit : "bus2",
busunitdesc: "Business Unit 2",
division : "div3"
}, //etc
]
所以可以在属性/bunits
上过滤第二个下拉列表(绑定到division
)。
sap.ui.commons.table.Table
内置于JSView组件中,如下所示:
var oTable = new sap.ui.table.Table()
//First column w/ dropdown Divisions
.addColumn(new sap.ui.table.Column({
label: new sap.ui.commons.Label({
text: "Division"
}),
template: new sap.ui.commons.DropdownBox({
selectedKey: "{tablemodel>division}",
items: {
path: "metadatamodel>/divisions",
template: new sap.ui.core.ListItem({
text: "{metadatamodel>divisiondesc}",
key: "{metadatamodel>division}"
})
}
})
}))
//Second column w/ dropdown Business Units, which should be filtered
.addColumn(new sap.ui.table.Column({
label: new sap.ui.commons.Label({
text: "Business Unit"
}),
template: new sap.ui.commons.DropdownBox({
selectedKey: "{tablemodel>bus_unit}",
items: {
path: "metadatamodel>/bunits",
template: new sap.ui.core.ListItem({
text: "{metadatamodel>busunitdesc}",
key: "{metadatamodel>busunit}"
})
,
filters: [new sap.ui.model.Filter("division", sap.ui.model.FilterOperator.EQ, "{tablemodel>division}")]
}
})
}))
.bindRows("tablemodel>/");
从上面可以看出,预期的行为是第二个下拉列表将在属性division
上使用当前表的division
属性的值(即{tablemodel>division}
)进行过滤
(完整代码is available in this JSbin project)
然而...
由于某种原因,当前当前表的division
属性的值未被识别,或者在创建过滤器时根本没有设置(我无法分辨哪个是真的),导致空第二个下拉列表(即没有有效的过滤器)。
错误因此在于这一行代码的值绑定:
filters: [new sap.ui.model.Filter("division", sap.ui.model.FilterOperator.EQ, "{tablemodel>division}")]
我的问题是:
{tablemodel>division}
等数据绑定为每一行设置过滤器值?我知道它在表外工作,但在这种情况下,下拉列表是一个与表数据相对绑定的模板限制:
理想情况下,我不想在第一个下拉列表中使用onChange
事件,因为第二个下拉列表应该已根据可用的表数据进行过滤,而不是使用第一个下拉列表进行选择更改
任何帮助将不胜感激!
=============================================== ==
编辑:我刚刚测试了一个只有一个下拉列表的页面,并且它也无法正常工作!...
如果我使用过滤器值,数据绑定指定了过滤器值value1
:
new sap.ui.model.Filter({
path : "division",
operator : sap.ui.model.FilterOperator.EQ,
value1 : "{/someProperty}"
})
然后下拉列表不会呈现任何项目
但是,如果我在属性value1
处对值进行硬编码:
new sap.ui.model.Filter({
path : "division",
operator : sap.ui.model.FilterOperator.EQ,
value1 : "Test"
})
然后过滤器按预期工作。
底线:
我们不能使用数据绑定来指定过滤器值吗?
答案 0 :(得分:2)
true 我们不能使用数据绑定来指定过滤器值。请查看您的另一个问题Not possible to set Filter value using data binding?的答案。