SAPUI5:如何创建控件层次结构?



我希望你能帮我解决这个问题。在多次阅读所有文档、谷歌搜索等之后,我没有找到以干净的方式完成我将要解释的内容的方法,并且认为我错过了一些东西,因为这是一个非常基本的场景。

我正在使用 oData 模型,在本例中为 2 个命名模型,"模型 1"、"模型 2"。现在我想要的是显示一个基于 oData 路径的"父"ComboBox,以及一个根据选择更改其项目的表,换句话说。

Model1 { //JSON representation of the data.
Accounts:[
"account 1": {invoices: ["invoice1", "invoice2", "invoice3"]},
"account 2": {invoices:["invoice4", "invoice5"]}
]
}

组合框:

<... items={Model1>/Accounts} /> -- This works and shows Account 1, and Account2.

桌子

<Table... items="{Model1>Invoices}">
..
<items>
....
</items>
</Table>

我想要的是表将其上下文更改为在 ComboBox 上选择的帐户。关键是这有效,但是第一次加载视图时,由于没有选择帐户,它会调用错误的 odata 路径 MYSERVICE/Invoices,而不是什么都不做,因为帐户尚未设置,发票的路径,一旦选择了帐户,就应该是 MYSERVICE/帐户('Account1'(/发票。

我知道我可以用代码做到这一点,但我相信必须有一种干净的方法来做到这一点。

说真的,这让我发疯了。

感谢您的帮助。

你确定

items="{Model1>Invoices}"

触发 odata 调用?因为这是一个相对路径(没有前导斜杠(,所以通常它不应该执行调用。

您可以执行的操作:

  1. 处理组合框选择更改事件;
  2. 在此事件处理程序中,创建要将表绑定到的路径。在您的情况下,路径可能如下所示:"/Account(Account1(" - "/{EntitySetName}({KEY}("。您可以使用 ODataModel2 的创建密钥方法;
  3. 使用以下路径设置表的上下文:

    oTable.bindObject({ path: sPath, model: "Model1", parameters: { $expand: "Invoices" } });

  4. 设置上下文后,相对绑定将自动开始工作,表将获取"发票">

我假设帐户和发票通过导航属性和一对多基数链接,这就是$expand参数将加载相应发票的原因。

最新更新