2017-02-22 84 views
0

我有一个项目列表。点击后,我想打开一个新的对话框并将其绑定到有关点击项目的一些详细信息。动态数据绑定对话框

我的数据源是一个带有OData接口的SAP HANA数据库。界面看起来像:

Table/Path: Items 
|ID|NAME|PRICE|ITEM_DETAILS (Navigation Property)| 

Table/Path: ItemsDetails 
|ID|ITEM_ID|...| 

该列表具有绑定到Items,它工作正常。点击一下,我想将我的对话框绑定到导航属性ITEM_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> 

的事件处理程序:

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("ITEM_DETAILS"); 
} 
this.selectLoadProfile.open(); 

谁能告诉我怎么可以动态加载数据?

回答

0

你的问题有点让我困惑,我从中得到的理解是你在列表项目中有一个列表在你的视图中,一个对话框打开,其中包含项目详细信息,这是项目的导航属性。以下是您正在尝试的代码。

this.selectLoadProfile.bindElement("ITEM_DETAILS"); 

此声明不是特定于要绑定的项目细节,所以请尝试使用下面的绑定路径。

this.selectLoadProfile.bindElement("ITEM(id)/ITEM_DETAILS"); 

正如上面的语句是在条件(!this.selectLoadProfile)确保执行每次使单元的结合应该更新。

我希望这会对你有用。

0

一种方法是在Click事件处理程序中获取Item路径,并将ItemDetail路径绑定到Dialog。

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(); 
} 
+0

好吧,现在我走对了。但细节仍然是错误的。绑定不想更新。如果我使用'..getModel()。refresh()',只有“父”视图刷新。它看起来好像片段完全在控制之外.. – Tobias

+0

您是否通过setDefaultBindingMode(sap.ui.model.BindingMode.TwoWay)将您的ODataModel bindingMode设置为ToWay? – Allen

+0

是的,现在我有...;)但问题仍然存在。我找到了Chrome的UI5 Inspector,发现bindingContext为空,而我的工作列表有一个bindingContext ..可能是问题吗? – Tobias