我有一个列表报告,一旦选择了一个项目,就会提示输入一个对象页面。我没有使用FIORI Elements,一切都是从头开始创建的。 对象页面有一个静态标题,但其正文从一个项目更改为另一个项目。本质上,身体使用不同的片段,这些片段取决于所选项目的字段(位置类型)。换句话说:
要做到这一切,在对象页面的控制器上,我已经使用onBeforeRendering生命周期方法实现了以下内容:
onBeforeRendering: function() {
// // Set Fragment to be used
var oLayout = this.getView().byId("ObjectPageLayout"),
oFragment = sap.ui.xmlfragment(this._fragmentName());
oLayout.addSection(oFragment);
},
_fragmentName: function() {
var oModel = this.getView().getModel();
var sPosType = oModel.getProperty(this.getView().getObjectBinding().getPath() + "/PositionType");
var sFragment;
if (sPosType === "1") {
sFragment = "A";
} else if (sPosType === "2") {
sFragment = "B";
}
return sFragment;
},
我面临的问题是此代码抛出以下错误消息:“未捕获(在承诺中)TypeError:无法读取未定义的属性'getPath'”
我发现使其工作的唯一方法是使用onInit,而不是使用onBeforeRendering方法。这样,getPath()工作正常。但是,如果用户返回列表报告,然后选择不同位置类型的项目,则对象页面将显示在上一个项目中使用的相同片段。
万一你想知道,下面你会找到对象视图:
<mvc:View height="100%" xmlns="sap.uxap" xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns:m="sap.m" xmlns:semantic="sap.m.semantic"
xmlns:forms="sap.ui.layout.form" xmlns:layout="sap.ui.layout" controllerName="objectview.controller"
xmlns:aud="sap.uxap.sample.SharedBlocks.fragmentblocks">
<semantic:FullscreenPage id="page" navButtonPress="onNavBack" showNavButton="true" title="{i18n>ObjectPageTitle}">
<m:Page title="Object Page Title">
<m:content>
<ObjectPageLayout id="ObjectPageLayout">
<headerTitle>
<ObjectPageHeader id="ItemTitle" objectTitle="Item Title">
<actions>
Some actions defined
</actions>
</ObjectPageHeader>
</headerTitle>
<headerContent>
Some Header Content
</headerContent>
<sections>
</sections>
</ObjectPageLayout>
</m:content>
<m:footer>
<m:Bar>
<m:contentRight>
Buttons added to the Footer
</m:contentRight>
</m:Bar>
</m:footer>
</m:Page>
</semantic:FullscreenPage>
答案 0 :(得分:0)
每次进入页面时都会在部分容器上添加新部分。
您可以在添加新部分之前删除所有现有部分。
oLayout.removeAllSections();
oLayout.addSection(oFragment);