我有一个经典的情况-一个带有两个组合框(确切地说是sap.m.Select控件)的表,在第一个选择之后,我想更新第二个组合框的值。这是我的模型,基本上,第一个组合框应该包含可用状态列表,一旦选择了一些状态,第二个sap.m。选择控件应由相关城市填充
{
countries: [
{ country: 'France', cities: ['Paris', 'Marseille', 'Lyon']},
{ country: 'Germany', cities: ['Berlin', 'Bonn']}
]
}
问题是我不知道该怎么做。我可以使用类似的方法获取更新行的ID。
onCountryChange: function (oEvent) {
const selectedItem = oEvent.getParameter("selectedItem");
var path = selectedItem.getBindingContext().getPath();
bindComboBox(path); // this should rebind the data, but not written yet
}
我现在知道我应该在正确的组合框中重新绑定数据,但是,我不知道如何仅影响正确行上的单个组合框以及如何更新它。有人可以建议我怎么做吗?整个表是在.xml视图中定义的,我是否也可以使用格式化程序或内联表达式来执行此操作,或者这种情况是否太难了?
谢谢
答案 0 :(得分:1)
您可以使用bindAggregation方法(来自ManagedObject)类重新组合组合框的项目。
onCountryChange: function (oEvent) {
const selectedItem = oEvent.getParameter("selectedItem");
var path = selectedItem.getBindingContext().getPath();
this.byId("combo2").bindAggregation("items", {
path: path + "/cities",
template: new sap.ui.core.Item({
key: "{}",
text: "{}"
})
});
}
注意:用第二个组合框/选择控件的ID替换“ combo2”。
编辑:要获取正确的组合框(假设您在一个表上创建了多个),请使用第一个组合框的ID(oEvent.getSource().getId()
)来生成第二个组合框的ID。表的结构(及其创建方式)我无法提供更多。