Sapui5 onBeforeRendering中调用的方法getPath返回未定义的
我有一个列表报告,一旦选择了一个项目,就会提示到一个对象页面。我没有使用FIORI元素,一切都是从头开始创建的。 对象页面有一个静态标题,但其主体会随着项目的不同而变化。本质上,主体使用不同的片段,这取决于所选项目的字段(位置类型)。换言之:Sapui5 onBeforeRendering中调用的方法getPath返回未定义的,sapui5,Sapui5,我有一个列表报告,一旦选择了一个项目,就会提示到一个对象页面。我没有使用FIORI元素,一切都是从头开始创建的。 对象页面有一个静态标题,但其主体会随着项目的不同而变化。本质上,主体使用不同的片段,这取决于所选项目的字段(位置类型)。换言之: Pos类型1--->片段A 位置类型2--->片段B 为此,在对象页面的控制器上,我使用onBeforeRendering生命周期方法实现了以下内容: onBeforeRendering: function() { // //
- Pos类型1--->片段A
- 位置类型2--->片段B
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上设置),我可以获得参数,并从中决定下一步应该调用哪个片段。我现在遇到的问题是,每次选择一个项目时,此解决方案都会不断向节控件添加内容。因此,我需要知道如何仅从节控件销毁/删除/删除内容