UI5-如何根据另一个组合框将数据动态绑定到表中的“选择”项?

时间:2019-06-20 14:55:30

标签: sapui5

我有一个经典的情况-一个带有两个组合框(确切地说是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视图中定义的,我是否也可以使用格式化程序或内联表达式来执行此操作,或者这种情况是否太难了?

谢谢

1 个答案:

答案 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。表的结构(及其创建方式)我无法提供更多。