在模型更新之后,我的面板将被清空。

2020-09-22 15:50发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 我一直在(再次)讨论...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我一直在(再次)讨论ui5的问题。 我正在创建一个新笔记,并且其中包含我的笔记的列表将被清空。 我尝试刷新绑定,重新调用oData甚至重新路由回到视图(有点蛮力),但似乎没有任何效果。 这是详细信息。

我的detail.view.xml看起来像这样:(只是要空白的面板)

 <面板ID =" __ panel1" expandable =" true" expand =" false">
 
 
 
 
 
 <内容>
 
 <清单
         id =" complexNotesList"
 items =" {path:'ComplexNotes',排序器:{path:'CreatedAt',降序:true}}""
 growth =" true"
 growthThreshold =" 4"
 growScrollToLoad =" false">
 
 
 
 
 
 
 

看起来像这样:

也许很重要的一个细节是,上面的'ComplexNotes'是$ expand的一部分。 在detail.controller.js的Init中,我执行此操作。

 _onRouteFound:函数(oEvent){
 var oArg = oEvent.getParameter(" arguments");
 var oView = this.getView();
 oView.bindElement({
 路径:"/img/Opportunities(guid'" + oArg.Guid +"')",
 参数:{
 " expand":" ComplexNotes,SalesTeam,MainContact"
 }
 });
 }
 

到目前为止一切顺利。 现在,当我创建一个新便笺时,我想在提要列表中成功后立即看到它。 但是,它不仅不会显示,而且不会显示任何注释。

这是创建新笔记的步骤。 这工作得很好...意味着便笺创建成功。 但是,在"成功"之后大约一秒钟,该列表被清空。 我在代码行中添加了一些"->",这些行的行为不尽如人意(或我认为不应该)。

 onPost:function(oEvent){
 var oModel = this.getView()。getModel();
 var Guid = oModel.getProperty(this.getView()。getBindingContext()。getPath()+"/img/Guid");
 var注意= oEvent.getParameter(" value");
 var newNote = {
 " HeaderGuid":Guid,
 " TextObjectID":" A002",
 " TextLanguageID":" EN",
 "内容":注意
 };
 var that = this;
 oModel.create("/img/OpportunityComplexNotesSet",newNote,{
 成功:function(oData){
 MessageToast.show("成功..." + oData.Content);
 -> var oList = that.byId(" complexNotesList");
 -> oList.getBinding(" items")。refresh(true);
 },
 错误:function(oError){
 MessageToast.show(" Awww Snap!" + oError);
 }
 });
 }
 

发布后...:(

另一个细节...当我放入调试器并查看模型时。 笔记在那里。 就像detail.view.xml不再看到它一样。 视图上的其他面板都很好。 惑。 如果我在调试器中执行" this.getView()。getModel()",然后看...这是模型。

我认为这可能与$ expand有关,但不知道。 再次感谢大家。 感谢您的帮助。

(81.0 kB)
1条回答
落灬小鱼
2020-09-22 16:16 .采纳回答

大家好,

我无法使它正常工作,所以我尝试了另一种方法。 我以为我的问题可能是数据是$ expand的一部分,所以我决定为笔记使用命名模型。 以下是我所做的,并且可以正常工作。

在component.js中,我在init中声明了一个命名的json模型。

 this.setModel(new sap.ui.model.json.JSONModel()," myNotesModel"); 

然后我在我的detailer.controller.js中填充了所述模型。

 oModel.read("/机会(guid'" + oArg.Guid +"')?$ expand = ComplexNotes",{
 成功:function(oData){
 var myNotesModel = that.getOwnerComponent()。getModel(" myNotesModel");
 myNotesModel.setData(oData.ComplexNotes.results);
 },
 错误:function(error){
 console.log(" Awww Snap!");
 }
 });
 

我还注释了detail.controller.js中的$ expand。

 _onRouteFound:函数(oEvent){
 var oArg = oEvent.getParameter(" arguments");
 var oView = this.getView();
 oView.bindElement({
 路径:"/img/Opportunities(guid'" + oArg.Guid +"')",
 参数:{
//" expand":" SalesTeam"
 }
 });
 }
 

除引用所述命名模型外,视图保持不变。

 <列表
     id =" complexNotesList"
     items =" {path:'myNotesModel>/',排序器:{path:'CreatedAt',降序:true}}""
     growth =" true"
     growthThreshold =" 4"
     growScrollToLoad =" false">
 

然后在用户发布便笺时对detail.component.js进行小的更改。

 oModel.create("/img/OpportunityComplexNotesSet",newNote,{
 成功:function(oData){
 var oNotesData = that.getOwnerComponent()。getModel(" myNotesModel")。oData;
 oNotesData.unshift(oData);
 var oList = that.byId(" complexNotesList");
 oList.getBinding(" items")。refresh(true);
 },
 错误:function(oError){
 MessageToast.show(" Awww Snap!" + oError);
 }
 });
 

这对我有用,因此如果它可以帮助其他人。 或者,当然,如果您有更好的方法,请告诉我。

格雷格

一周热门 更多>