是否可以基于父元素在SAPUI5中进行一些条件绑定?

是否可以基于父元素在SAPUI5中进行一些条件绑定?,sapui5,Sapui5,我有一个XML片段,在XML视图中的几个地方使用它,如下所示: <IconTabFilter text="ABC" key="1" icon="sap-icon://alphabetical-order"> <content> <Table id="table1" width="auto" items="{path:'/ContactSet',parameters:{expand:'BusinessAddress,HomeAddress,Ot

我有一个XML片段,在XML视图中的几个地方使用它,如下所示:

<IconTabFilter text="ABC" key="1" icon="sap-icon://alphabetical-order">
    <content>
        <Table id="table1" width="auto" items="{path:'/ContactSet',parameters:{expand:'BusinessAddress,HomeAddress,OtherAddress,Photo'},filters:[{path:'Surname',operator:'StartsWith',value1:'A'},{path:'Surname',operator:'StartsWith',value1:'B'},{path:'Surname',operator:'StartsWith',value1:'C'}]}" noDataText=" {worklistView>/tableNoDataText}" busyIndicatorDelay="{worklistView>/tableBusyDelay}" growing="true" growingScrollToLoad="true" updateFinished="onUpdateFinished">
            <headerToolbar>
                <core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesHeader" type="XML"/>
            </headerToolbar>
            <columns>
                <core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesColumns" type="XML"/>
            </columns>
            <items>
                <core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesRows" type="XML"/>
            </items>
        </Table>
    </content>
</IconTabFilter>
<IconTabSeparator icon="sap-icon://process"/>
<IconTabFilter text="DEF" key="2" icon="sap-icon://alphabetical-order">
    <content>
        <Table id="table2" width="auto" items="{path:'/ContactSet',parameters:{expand:'BusinessAddress,HomeAddress,OtherAddress,Photo'},filters:[{path:'Surname',operator:'StartsWith',value1:'D'},{path:'Surname',operator:'StartsWith',value1:'E'},{path:'Surname',operator:'StartsWith',value1:'F'}]}" noDataText="{worklistView>/tableNoDataText}" busyIndicatorDelay="{worklistView>/tableBusyDelay}" growing="true" growingScrollToLoad="true" updateFinished="onUpdateFinished">
            <headerToolbar>
                <core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesHeader" type="XML"/>
            </headerToolbar>
            <columns>
                <core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesColumns" type="XML"/>
            </columns>
            <items>
                <core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesRows" type="XML"/>
            </items>
        </Table>
    </content>
</IconTabFilter>
现在的问题是如何根据片段的父元素定制片段内部的绑定。 例如,我希望在使用
key=“1”
将其放置在
IconTabFilter
中时使用
,在使用
key=“2”
将其放置在
IconTabFilter
中时使用

一种可能性是,当我们将片段放入目的地时,将该绑定传递给该片段。但我不知道我们在
SAPUI5
中是否有任何选择

另一种可能是使用一些模板,如所解释的。但是,我也不知道如何基于父元素创建条件


注意:我不想直接在目标文件中输入片段文件中的代码,因为我想防止重复代码

您需要使用
worklistView
JSON模型。正如您提到的,它是一个JSON模型,有一个公共属性绑定到header文本控件,而不考虑所选键

加载时,
icontabar
将使用
selectedKey
属性设置默认的
key
。因此,我们可以将此
值设置为标题部分中标题文本的默认值

view.xml

<IconTabBar
    id="idIconTabBar"
    select="handleIconTabBarSelect"
    selectedKey="1"
    class="sapUiResponsiveContentPadding">
    <items>
        <IconTabFilter text="ABC" key="1" icon="sap-icon://alphabetical-order">
            <content>
                <Table id="table1" width="auto"  noDataText=" {worklistView>/tableNoDataText}" busyIndicatorDelay="{worklistView>/tableBusyDelay}" growing="true" growingScrollToLoad="true" updateFinished="onUpdateFinished">
                    <headerToolbar>
                        <core:Fragment fragmentName="path/tablesHeader" type="XML"/>
                    </headerToolbar>
                    <!-- columns-->
                    <!-- items -->
                </Table>
            </content>
        </IconTabFilter>
        <IconTabSeparator icon="sap-icon://process"/>
        <IconTabFilter text="DEF" key="2" icon="sap-icon://alphabetical-order">
            <content>
                <Table id="table2" width="auto"  noDataText="{worklistView>/tableNoDataText}" busyIndicatorDelay="{worklistView>/tableBusyDelay}" growing="true" growingScrollToLoad="true" updateFinished="onUpdateFinished">
                    <headerToolbar>
                        <core:Fragment fragmentName="path/tablesHeader" type="XML"/>
                    </headerToolbar>
                    <!-- columns-->
                    <!-- items -->
                </Table>
            </content>
        </IconTabFilter>
    </items>
</IconTabBar>
根据选择操作
worklistView
模型数据

  handleIconTabBarSelect: function(oEvent) { 
    var sSelectedKey = oEvent.getParameters("selectedKey").key;
    if (sSelectedKey) {
      var oModel = this.getView().getModel("worklistView");
      if (oModel) 
        oModel.setProperty("/worklistTableHdrTitle", (sSelectedKey === "1") ? oModel.getProperty("/worklistTable1Title") : oModel.getProperty("/worklistTable2Title"));
    }
  },

worklistView
JSON模型正确吗?是的,它是一个绑定到视图的JSON模型,用于控制视图的某些行为。这是一个聪明的想法和解决方案,但我还是希望听到一些关于在XML视图中模板化的内容。我希望有一些解决方案可以完全在片段和XML视图中实现这一点。假设我们在同一个选项卡中有两个表,或者当我们没有任何选项卡时,用户可以一目了然地看到所有重复的项。因此,我将投票赞成你的答案,但让我不接受它作为最终答案。
<core:FragmentDefinition xmlns="sap.m" xmlns:core="sap.ui.core">
    <Toolbar>
        <Title text="{worklistView>/worklistTableHdrTitle}"/>
        <ToolbarSpacer/>
        <SearchField tooltip="{i18n>worklistSearchTooltip}" search="onSearch" width="auto"/>
    </Toolbar>
</core:FragmentDefinition>
setworklistViewModel: function() {
    var oModel = new sap.ui.model.json.JSONModel();
    oModel.setData({
      "worklistTableHdrTitle": "Table1 Title",//default value, as selectedKey="1" in IconTabBar 
      "worklistTable1Title": "Table1 Title",
      "worklistTable2Title": "Table2 Title",
      "tableNoDataText": "No Data"
    });
    this.getView().setModel(oModel, "worklistView");
  },
  handleIconTabBarSelect: function(oEvent) { 
    var sSelectedKey = oEvent.getParameters("selectedKey").key;
    if (sSelectedKey) {
      var oModel = this.getView().getModel("worklistView");
      if (oModel) 
        oModel.setProperty("/worklistTableHdrTitle", (sSelectedKey === "1") ? oModel.getProperty("/worklistTable1Title") : oModel.getProperty("/worklistTable2Title"));
    }
  },