Sapui5 onBeforeRendering中调用的方法getPath返回未定义的

Sapui5 onBeforeRendering中调用的方法getPath返回未定义的,sapui5,Sapui5,我有一个列表报告,一旦选择了一个项目,就会提示到一个对象页面。我没有使用FIORI元素,一切都是从头开始创建的。 对象页面有一个静态标题,但其主体会随着项目的不同而变化。本质上,主体使用不同的片段,这取决于所选项目的字段(位置类型)。换言之: Pos类型1--->片段A 位置类型2--->片段B 为此,在对象页面的控制器上,我使用onBeforeRendering生命周期方法实现了以下内容: onBeforeRendering: function() { // //

我有一个列表报告,一旦选择了一个项目,就会提示到一个对象页面。我没有使用FIORI元素,一切都是从头开始创建的。 对象页面有一个静态标题,但其主体会随着项目的不同而变化。本质上,主体使用不同的片段,这取决于所选项目的字段(位置类型)。换言之:

  • Pos类型1--->片段A
  • 位置类型2--->片段B
为此,在对象页面的控制器上,我使用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;
    },
我面临的问题是,此代码抛出以下错误消息:“Uncaught(in promise)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>

定义了一些操作
一些标题内容
添加到页脚的按钮

每次进入页面时,都会在节容器中添加一个新节

在添加新节之前,可以删除所有现有节

oLayout.removeAllSections();
oLayout.addSection(oFragment);

最后我终于解决了这个问题(部分到现在为止)。问题是,在所有生命周期方法中,getpath都不会返回任何内容。通过使用onObjectMatched(在onInit上设置),我可以获得参数,并从中决定下一步应该调用哪个片段。我现在遇到的问题是,每次选择一个项目时,此解决方案都会不断向节控件添加内容。因此,我需要知道如何仅从节控件销毁/删除/删除内容