Sapui5 带有对话框的动态数据绑定
我有一张物品清单。单击后,我想打开一个新对话框,并将其绑定到有关单击项的一些详细信息 我的数据源是一个带有OData接口的SAP HANA数据库。界面如下所示:Sapui5 带有对话框的动态数据绑定,sapui5,Sapui5,我有一张物品清单。单击后,我想打开一个新对话框,并将其绑定到有关单击项的一些详细信息 我的数据源是一个带有OData接口的SAP HANA数据库。界面如下所示: Table/Path: Items |ID|NAME|PRICE|ITEM_DETAILS (Navigation Property)| Table/Path: ItemsDetails |ID|ITEM_ID|...| 该列表绑定到项,效果良好。单击后,我想将对话框绑定到导航属性ITEM\u DETAILS,但新绑定不起作用。对话
Table/Path: Items
|ID|NAME|PRICE|ITEM_DETAILS (Navigation Property)|
Table/Path: ItemsDetails
|ID|ITEM_ID|...|
该列表绑定到项
,效果良好。单击后,我想将对话框绑定到导航属性ITEM\u DETAILS
,但新绑定不起作用。对话框仍然绑定/显示到“旧”路径Items
,而不是ItemsDetails
对话框片段:
<core:FragmentDefinition
xmlns="sap.m"
xmlns:core="sap.ui.core">
<SelectDialog
id="detailInformation"
noDataText="No data..."
title="{item}">
<StandardListItem
title="{ID}"
description="{FREQUENCY}"
type="Active" />
</SelectDialog>
</core:FragmentDefinition>
有人能告诉我如何动态加载数据吗 您的问题让我有点困惑,我从中了解到的是,单击列表项时,您的视图中有一个列表。打开了一个对话框,其中包含项目详细信息,这是项目的导航属性。下面是您正在尝试的代码
this.selectLoadProfile.bindElement("ITEM_DETAILS");
此语句不特定于要绑定的项目详细信息。请尝试以下绑定路径
this.selectLoadProfile.bindElement("ITEM(id)/ITEM_DETAILS");
由于上述语句处于条件(!this.selectLoadProfile)
中,请确保每次都执行,以便元素的绑定应该更新
我希望这对你有用 一种方法是在Click事件处理程序中获取项目路径,并将ItemDetail路径绑定到对话框
onClick:function(oEvent) {
var oControl = oEvent.getSource();
var oItemPath = oControl.getBindingContext().getPath();
var oItemDetailPath = oItemPath + "/ITEM_DETAILS";
if (!this.selectLoadProfile) {
this.selectLoadProfile = sap.ui.xmlfragment(this.getView().getId(),
"de.xxx.view.fragment.Dialog", this);
this.getView().addDependent(this.selectLoadProfile);
}
this.selectLoadProfile.bindElement(oItemDetailPath);
this.selectLoadProfile.open();
}
好了,现在我走对了路。但细节仍然是错误的。绑定不希望更新。如果我使用
.getModel().refresh()
仅刷新“父”视图。看起来片段完全超出了控制范围..您是否通过setDefaultBindingMode(sap.ui.model.bindingMode.TwoWay)将ODataModel bindingMode设置为ToWay?是的,现在我有了…;)但问题依然存在。我找到了用于Chrome的UI5检查器,并发现bindingContext为null,而我的工作列表具有bindingContext。。这就是问题所在吗?不。我无法设定正确的路径。它不会更新:/
onClick:function(oEvent) {
var oControl = oEvent.getSource();
var oItemPath = oControl.getBindingContext().getPath();
var oItemDetailPath = oItemPath + "/ITEM_DETAILS";
if (!this.selectLoadProfile) {
this.selectLoadProfile = sap.ui.xmlfragment(this.getView().getId(),
"de.xxx.view.fragment.Dialog", this);
this.getView().addDependent(this.selectLoadProfile);
}
this.selectLoadProfile.bindElement(oItemDetailPath);
this.selectLoadProfile.open();
}