使用诺言的UI5渲染问题

2020-08-23 05:04发布

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

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


大家好,

我们在构建UI5应用时遇到了问题。 我有一个名为"提供者"的组件,该组件显示服务提供者及其经度和纬度详细信息的列表。 当我们单击任何服务提供商时,它将导航到"详细应用"。

通过使用调用详细信息应用程序:

sap.ui.getCore()。createComponent({

名称:" XXX.ProviderDetails",

id:" providerDtl",

componentData:{

" targetViewName":"主要"

},

设置:{

serviceID:serviceID,

provRefGUID:proGUID,

遇见GUID:EncounterGUID,

距离:距离

}

上面的代码调用Details component.js的init方法。 在组件初始化方法中,我编写了所有代码以使用promise从OData获取数据,然后在then块中调用了

sap.ui.core.UIComponent.prototype.init.apply(this,arguments);。

Component.js:

初始化:function(){

尝试{

console.log(" init init");

var oConfig = this.getMetadata()。getConfig();

//设置i18n模型

var i18nModel = this.getModel(" i18n");

this.setModel(i18nModel," i18n");

//创建域模型并将其设置为组件

var oModel = this.getModel();

//oModel.setSizeLimit(5000);

this.setModel(oModel);

var oComp = this;

尝试{

sap.ui.getCore()。loadLibrary(" openui5.googlemaps"," ./openui5/googlemaps");

//sap.ui.require(['mhs/horizo​​n/ProviderDetails/openui5/googlemaps/MapUtils']);

sap.ui.require(['openui5/googlemaps/MapUtils']);

openui5.googlemaps.ScriptsUtil.setApiKey('*******');

}抓住(e){

jQuery.sap.log.error(" mhs.horizo​​n.ProviderDetails.Component中的错误:创建component():正在加载地图:" + e);

}

//获取URL参数

this.sSamKey = this.getURLParameterValue(" SOURCE_SESSION_ID");

如果(this.sSamKey ==未定义|| this.sSamKey ==""){

this.sSamKey =" TEST_SAMKEY";

}

this.sEncounterGUID = this.getURLParameterValue(" EncounterGUID");

this.sServiceID = this.getURLParameterValue(" ServiceID");

var dist = this.getURLParameterValue(" Distance");

this.sDistance = this.validateDistance(dist);

this.sProvRefGUID = this.getURLParameterValue(" ProvRefGUID");

oComp = this;

尝试{

调试器;

var meetPromise = this.readEncounterData(oComp,this.sEncounterGUID);

遇见Promise.then(function(oData){

如果(this.sServiceID && this.sProvRefGUID && this.sEncounterGUID){

var srvProvPromise = this.readServiceProviders(this.sServiceID,this.sProvRefGUID,this.sEncounterGUID,oComp);

var that = this;

srvProvPromise.then(function(){

调试器;

sap.ui.core.UIComponent.prototype.init.apply(this,arguments);

} .bind(this))。catch(function(oResult){

console.log(" errorERE!此处为undefined111");

oComp.displayError(oResult);

} .bind(this));

}

} .bind(this))。catch(function(oResult){

console.log(" errorERE!此处为undefined111");

oComp.displayError(oResult);

} .bind(this));

}抓住(e){

jQuery.sap.log.error(" mhs.horizo​​n.ProviderDetails.Component中的错误:初始化component():" + e);

}

}抓住(e){

jQuery.sap.log.error(" mhs.horizo​​n.ProviderDetails.Component中的错误:初始化component():" + e);

}

},

在默认的SAP标准中,上述代码中的

,即用型函数init.apply调用即用型函数createContent方法来调用Main视图,该主视图又调用其他视图控制器,如图所示 下面。

createContent:function(){

尝试{

调试器;

//声明路由器

var oRouter = this.getRouter();

this.oRouteHandler =新的sap.m.routing.RouteMatchedHandler(oRouter);

oRouter.register(" appRouterPD");

return sap.ui.view({

id:this.createId(" idMain"),

viewName:" mhs.horizo​​n.ProviderDetails.view.Main",

类型:sap.ui.core.mvc.ViewType.XML,

viewData:{

组件:此

}

});

}抓住(e){

jQuery.sap.log.error(" csview.CallSummary createContent()中的错误:" + e);

}

},

现在的问题是,一切都可以完美执行,并且在Console中没有错误。 但是用户界面是空白的。 仅当init.apply在promise的" then"块中时,才会出现此问题。

您能对此提供任何反馈吗?

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

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


大家好,

我们在构建UI5应用时遇到了问题。 我有一个名为"提供者"的组件,该组件显示服务提供者及其经度和纬度详细信息的列表。 当我们单击任何服务提供商时,它将导航到"详细应用"。

通过使用调用详细信息应用程序:

sap.ui.getCore()。createComponent({

名称:" XXX.ProviderDetails",

id:" providerDtl",

componentData:{

" targetViewName":"主要"

},

设置:{

serviceID:serviceID,

provRefGUID:proGUID,

遇见GUID:EncounterGUID,

距离:距离

}

上面的代码调用Details component.js的init方法。 在组件初始化方法中,我编写了所有代码以使用promise从OData获取数据,然后在then块中调用了

sap.ui.core.UIComponent.prototype.init.apply(this,arguments);。

Component.js:

初始化:function(){

尝试{

console.log(" init init");

var oConfig = this.getMetadata()。getConfig();

//设置i18n模型

var i18nModel = this.getModel(" i18n");

this.setModel(i18nModel," i18n");

//创建域模型并将其设置为组件

var oModel = this.getModel();

//oModel.setSizeLimit(5000);

this.setModel(oModel);

var oComp = this;

尝试{

sap.ui.getCore()。loadLibrary(" openui5.googlemaps"," ./openui5/googlemaps");

//sap.ui.require(['mhs/horizo​​n/ProviderDetails/openui5/googlemaps/MapUtils']);

sap.ui.require(['openui5/googlemaps/MapUtils']);

openui5.googlemaps.ScriptsUtil.setApiKey('*******');

}抓住(e){

jQuery.sap.log.error(" mhs.horizo​​n.ProviderDetails.Component中的错误:创建component():正在加载地图:" + e);

}

//获取URL参数

this.sSamKey = this.getURLParameterValue(" SOURCE_SESSION_ID");

如果(this.sSamKey ==未定义|| this.sSamKey ==""){

this.sSamKey =" TEST_SAMKEY";

}

this.sEncounterGUID = this.getURLParameterValue(" EncounterGUID");

this.sServiceID = this.getURLParameterValue(" ServiceID");

var dist = this.getURLParameterValue(" Distance");

this.sDistance = this.validateDistance(dist);

this.sProvRefGUID = this.getURLParameterValue(" ProvRefGUID");

oComp = this;

尝试{

调试器;

var meetPromise = this.readEncounterData(oComp,this.sEncounterGUID);

遇见Promise.then(function(oData){

如果(this.sServiceID && this.sProvRefGUID && this.sEncounterGUID){

var srvProvPromise = this.readServiceProviders(this.sServiceID,this.sProvRefGUID,this.sEncounterGUID,oComp);

var that = this;

srvProvPromise.then(function(){

调试器;

sap.ui.core.UIComponent.prototype.init.apply(this,arguments);

} .bind(this))。catch(function(oResult){

console.log(" errorERE!此处为undefined111");

oComp.displayError(oResult);

} .bind(this));

}

} .bind(this))。catch(function(oResult){

console.log(" errorERE!此处为undefined111");

oComp.displayError(oResult);

} .bind(this));

}抓住(e){

jQuery.sap.log.error(" mhs.horizo​​n.ProviderDetails.Component中的错误:初始化component():" + e);

}

}抓住(e){

jQuery.sap.log.error(" mhs.horizo​​n.ProviderDetails.Component中的错误:初始化component():" + e);

}

},

在默认的SAP标准中,上述代码中的

,即用型函数init.apply调用即用型函数createContent方法来调用Main视图,该主视图又调用其他视图控制器,如图所示 下面。

createContent:function(){

尝试{

调试器;

//声明路由器

var oRouter = this.getRouter();

this.oRouteHandler =新的sap.m.routing.RouteMatchedHandler(oRouter);

oRouter.register(" appRouterPD");

return sap.ui.view({

id:this.createId(" idMain"),

viewName:" mhs.horizo​​n.ProviderDetails.view.Main",

类型:sap.ui.core.mvc.ViewType.XML,

viewData:{

组件:此

}

});

}抓住(e){

jQuery.sap.log.error(" csview.CallSummary createContent()中的错误:" + e);

}

},

现在的问题是,一切都可以完美执行,并且在Console中没有错误。 但是用户界面是空白的。 仅当init.apply在promise的" then"块中时,才会出现此问题。

您能对此提供任何反馈吗?

付费偷看设置
发送
2条回答
DafaDDDa
1楼-- · 2020-08-23 05:37

通过快速回顾,我认为您需要使用一个模型来捕获来自诺言的响应,而不仅仅是变量。 基本上,如果您使用JSONModel并将设置映射到该模型,那么当您获得Promise响应并更新模型数据时,它将自动更新所有模型绑定。

路亽曱_Ryan
2楼-- · 2020-08-23 05:22

我可以在尝试创建此示例的示例中看到相同的行为。

我的样本也显示它不起作用:

初始化:function(){
       var oComponent = this;
       var oArgs = arguments;

       console.log(" init");

       var myPromise =新的Promise((解决,拒绝)=> {
         setTimeout(function(){
           resolve("成功!")
         },1000)
       })
       myPromise.then(function(oData){
         console.log("承诺返回" + oData);

         sap.ui.core.UIComponent.prototype.init.apply(oComponent,oArgs);
        
       }); 

不确定原因,但我认为我们需要备份一点。 您为什么要使这些项目同步?

通过使用模型,响应何时发生都没关系,一旦填充了模型,屏幕就会更新。

一周热门 更多>