Sapui5 UI5-如何根据另一个组合框将数据动态绑定到Select in表?

Sapui5 UI5-如何根据另一个组合框将数据动态绑定到Select in表?,sapui5,Sapui5,我有一个典型的情况-一个有两个组合框(或者确切地说,是sap.m.Select控件)的表,在第一个组合框中选择后,我希望更新第二个组合框中的值。这是我的模型,基本上,第一个组合框应该包含可用状态的列表,一旦选择了一些,第二个sap.m.Select控件应该由相关城市填充 { countries: [ { country: 'France', cities: ['Paris', 'Marseille', 'Lyon']}, { country: 'Germany', cities: ['Be

我有一个典型的情况-一个有两个组合框(或者确切地说,是sap.m.Select控件)的表,在第一个组合框中选择后,我希望更新第二个组合框中的值。这是我的模型,基本上,第一个组合框应该包含可用状态的列表,一旦选择了一些,第二个sap.m.Select控件应该由相关城市填充

{
 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视图中定义的,我可以用格式化程序或内联表达式来完成吗?或者这个场景太难了吗


谢谢

您可以使用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: "{}"
        })
    });
}
注意:将“combo2”替换为第二个组合框/选择控件的id


编辑:要获得正确的组合框(假设您在一个表上创建了多个组合框,请使用第一个组合框的ID(
oEvent.getSource().getId()
)来生成第二个组合框的ID。但不知道更多表的结构(以及如何创建)我无法提供更多信息。

您好,谢谢您的建议。我使用了您的代码,获取combobox并不是一个问题,因为它在xml文件中静态声明。但是,它没有任何作用,可能是因为我没有很好地回答这个问题-我使用的是没有方法的sap.m.Select控件(如果改为使用方法bindItems,则会出现错误“error:缺少元素聚合项的模板或工厂函数”)。您知道如何将这些项动态绑定到sap.m.Select控件吗?感谢百万bindItems(args)只是bindAggregation(“items”,args)因此,上面的properties对象也应该可以工作。错误是指无法找到如何在聚合中布局每个项。您需要提供模板(要复制到每行的项)或者使用上下文调用的工厂函数来生成一行。谢谢,上面的代码似乎仍然有效-我没有正确检索第二个组合框。因此,问题得到了回答。现在我只需要了解如何检索第二个控件的id-我有Select控件的id,还解析了row单击。如果有一些快速的方法获得它,我将非常感激,如果没有,我将尝试谷歌多一点…好消息!如果设置ID不起作用,你也可以使用第一个组合框的getParent方法,并沿着渲染树找到另一个组合框。祝你好运!不需要,通过“this.byId('table')获得ID.getRows()[row].getCells()[1];“再次感谢!