有两个片段。
片段1(工作)。
<Dialog id="idStgdlg" xmlns="sap.m">
<Panel id="idlogs_BpipelineStages" width="auto" expanded="true">
<FormattedText id="idStagewiselogsbuildhtml" />
</Panel>
<beginButton>
<Button text="Close" press=".onCloselog" type="Emphasized" />
</beginButton>
</Dialog>
片段2: close()
是 不 为此工作。
<Dialog id="idSonardlg"
xmlns="sap.m"
xmlns:form="sap.ui.layout.form"
xmlns:layout="sap.ui.layout"
>
<Panel id="idlogs_Sonar" width="auto" expanded="true">
<layout:DynamicSideContent id="DynamicSideContent"
class="sapUiDSCExplored sapUiContentPadding"
sideContentFallDown="BelowM"
containerQuery="true"
breakpointChanged=".updateToggleButtonState"
>
<List id="sonarRepId"
selectionChange=".onChange"
updateFinished=".onFinsihed"
mode="SingleSelectMaster"
items="{sonarReport>/measures}"
>
<ObjectListItem
class="sonarCustom"
type="Active"
title="{sonarReport>value}"
icon="{sonarReport>imageL}"
>
<ObjectAttribute text="{sonarReport>metric}" />
<firstStatus>
<ObjectStatus title="{sonarReport>state}" icon="{sonarReport>image}" state="Success" />
</firstStatus>
</ObjectListItem>
</List>
<layout:sideContent>
<Title level="H1" text="About This Project" />
<Panel>
<form:SimpleForm id="idSimpleForm"
editable="false"
layout="ResponsiveGridLayout"
maxContainerCols="2"
columnsM="2"
singleContainerFullSize="false"
labelSpanL="15"
labelSpanM="10"
labelSpanS="5"
>
<Label text="Lines Of Code" />
<Text text="{sonarReport>/metrics/LinesOfCode}" />
<Label text="CSS" />
<ProgressIndicator id="cssProgress" displayOnly="true" state="Success" />
<Text text="{sonarReport>/metrics/type/css}" />
<Label text="XML" />
<ProgressIndicator id="xmlProgress" displayOnly="true" state="Success" />
<Text text="{sonarReport>/metrics/type/xml}" />
<Label text="JavaScript" />
<ProgressIndicator id="jsProgress" displayOnly="true" state="Success" />
<Text text="{sonarReport>/metrics/type/javaScript}" />
</form:SimpleForm>
</Panel>
</layout:sideContent>
</layout:DynamicSideContent>
</Panel>
<beginButton>
<Button id="idclsSonar" text="Close" press=".onCloseSonar" type="Emphasized" />
</beginButton>
</Dialog>
控制器代码。
sap.ui.define([
"scp/com/saparate/controller/BaseController",
"scp/com/saparate/utils/formatter",
"sap/m/MessageToast",
"jquery.sap.global"
], function(BaseController, formatter, MessageToast, jQuery) {
"use strict";
return BaseController.extend("scp.com.saparate.controller.buildStages", {
formatter: formatter,
onInit: function() {
this._oRouter = this.getOwnerComponent().getRouter();
this._oRouter.getRoute("buildStages").attachPatternMatched(this._onObjectMatched, this);
this._jobid = "";
this._buildid = "";
},
_onObjectMatched: function(oEvent) {
var stageTable = this.getView().byId("idPipeLineBuildStageResults");
var items = stageTable.getItems();
for (var i = 0; i < items.length; i++) {
var stage = stageTable.getItems()[i].getCells()[0].getText();
if (stage === "Static Analysis") {
stageTable.getItems()[i].getCells()[4].setIcon("");
stageTable.getItems()[i].getCells()[4].setText("Report").addStyleClass("sonarReportsapMBtnInner");
stageTable.getItems()[i].getCells()[4].setType("Accept");
}
}
var skey = sap.ui.getCore().getModel('oKeyModel').getProperty("/saparate/key").authorizationToken;
if (typeof skey === "undefined" || skey === "" || skey === null) {
this.getRouter().navTo("Authorize");
} else {
var jobId = oEvent.getParameter("arguments").jobId;
var buildId = oEvent.getParameter("arguments").buildid;
this._jobid = jobId;
this._buildid = buildId;
this.byId("idbc_build").setText(jobId);
this.byId("idPipeLineBuildStageResults").setBusy(true);
this.getView().setModel(this.getOwnerComponent().getModel("sonarReport"), "sonarReport");
this.loadDatatoViewwithKey_GET_filter_2("JobStageResults", "?jobName=" + jobId + "&buildNumber=" + buildId, "Jobstatusdetails", sap.ui.getCore().getModel('oKeyModel').getProperty("/saparate/key"), this.byId("idPipeLineBuildStageResults"));
var sHeaders = {
"Content-Type": "application/json",
"Authorization": sap.ui.getCore().getModel('oKeyModel').getProperty("/saparate/key").authorizationToken
};
this.byId("idBreadcrum_buildStages").setCurrentLocationText(buildId);
var oModel_buildstageslog = new sap.ui.model.json.JSONModel();
this.byId("idlog_content").setBusy(true);
oModel_buildstageslog.loadData(this.getApiCall("log") + "?jobName=" + jobId + "&buildNumber=" + buildId, null, true, "GET", null, false, sHeaders);
oModel_buildstageslog.attachRequestCompleted(function() {
var p = this.byId("idlog_content");
p.removeAllContent();
var sResponse = oModel_buildstageslog.getData()["response"];
var r = JSON.stringify(sResponse).replace(/\\r\\n/g, "<br />");
var oText2 = new sap.ui.core.HTML();
oText2.setContent("<div class='idBuildlogs_html'>" + r + " </div>");
oText2.placeAt(this.byId("idlog_content"));
this.byId("idlog_content").setBusy(false);
}.bind(this));
}
},
onChange: function(oEvent) {
debugger;
var oSource = oEvent.getParameter("listItem")
var oModel = sap.ui.getCore().getModel();
var oProperty = oModel.getProperty("/Pressed");
if (!oProperty || oProperty != true) {
alert(oSource + " Selection Change Pressed");
oEvent.getSource().removeSelections(true);
} else {
oModel.setProperty("/Pressed", false);
}
},
navigateTo: function(oEvent) {
this.breadCrumbNavigate(oEvent.getSource().getParent(), "fromBuildStages", oEvent.getSource().data("selectedkey"));
},
onFinsihed: function(oEvent) {
var oList = oEvent.getSource();
var oItems = oList.getItems();
for (var i = 0; i < oItems.length; i++) {
var oItem = oItems[i];
var oTitle = oItem.getFirstStatus().getTitle();
switch (oTitle) {
case "Maintainability":
oItem.getFirstStatus().setState("Error");
break;
case "Reliability":
oItem.getFirstStatus().setState("Success");
break;
case "Security":
oItem.getFirstStatus().setState("Error");
break;
case "Security Review":
oItem.getFirstStatus().setState("Success");
break;
}
}
},
showStagewiselogs: function(oEvent) {
this.getView().setBusy(true);
var stageId = oEvent.getSource().getParent().getBindingContext("Jobstatusdetails").getObject().id;
var stage = oEvent.getSource().getParent().getBindingContext("Jobstatusdetails").getObject().name;
if (stage === "Static Analysis") {
this._oSonareDialog().open();
this.byId("idSonardlg").setTitle("Sonar Report");
this.progressCalc();
} else {
var sHeaders = {
"Content-Type": "application/json",
"Authorization": sap.ui.getCore().getModel('oKeyModel').getProperty("/saparate/key").authorizationToken
};
var oModel_buildstageslog_Stage = new sap.ui.model.json.JSONModel();
oModel_buildstageslog_Stage.loadData(this.getApiCall("stagelog") + "?jobName=" + this._jobid + "&buildNumber=" + this._buildid + "&stageId=" + stageId, null, true, "GET", null, false, sHeaders);
oModel_buildstageslog_Stage.attachRequestCompleted(function() {
this._getDialog().open();
var sResponse = oModel_buildstageslog_Stage.getData()["response"];
this.byId("idStagewiselogsbuildhtml").setHtmlText(sResponse);
var otxt_Stagedialog = stage + " " + this.getView().getModel("i18n").getResourceBundle().getText("stageLogs");
this.byId("idStgdlg").setTitle(otxt_Stagedialog);
this.getView().setBusy(false);
}.bind(this));
}
},
_getDialog: function() {
if (!this._oDialog) {
this._oDialog = sap.ui.xmlfragment(this.getView().getId(), "scp.com.saparate.view.fragments.Buildpipelinestagewisetasklogs", this);
this.getView().addDependent(this._oDialog);
}
return this._oDialog;
},
_oSonareDialog: function() {
if (!this._oSDialog) {
this._oSDialog = sap.ui.xmlfragment(this.getView().getId(), "scp.com.saparate.view.fragments.SonarReport", this);
this.getView().addDependent(this._oSDialog);
}
return this._oSDialog;
},
onCloselog: function() {
this.byId("idStagewiselogsbuildhtml").setHtmlText("");
this._getDialog().close();
},
onCloseSonar: function(oEvent) {
if (this._oSDialog) {
var oDialogS = this._oSDialog;
oDialogS.close();
}
},
refreshData: function(oEvent) {
this.refreshData_ui("JobStageResults", "?jobName=" + this._jobid + "&buildNumber=" + this._buildid, "Jobstatusdetails", this.byId("idPipeLineBuildStageResults"));
},
progressCalc: function() {
var totalLines = this.getView().getModel("sonarReport").getProperty("/metrics/LinesOfCode");
var cssNum = this.getView().getModel("sonarReport").getProperty("/metrics/type/css");
var xmlNum = this.getView().getModel("sonarReport").getProperty("/metrics/type/xml");
var jsNum = this.getView().getModel("sonarReport").getProperty("/metrics/type/javaScript");
totalLines = parseFloat(totalLines.replace(/,/g, 'k'));
cssNum = parseFloat(cssNum.replace(/,/g, 'k'));
xmlNum = parseFloat(xmlNum.replace(/,/g, 'k'));
jsNum = parseFloat(jsNum.replace(/,/g, 'k'));
this.byId("cssProgress").setPercentValue((cssNum / totalLines) * 100);
this.byId("xmlProgress").setPercentValue((xmlNum / totalLines) * 100);
this.byId("jsProgress").setPercentValue((jsNum / totalLines) * 100);
},
toBuildChanges: function(oEvent) {
var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
oRouter.navTo("Buildchanges", {
jobId: this._jobid,
buildid: this._buildid
});
},
});
});
片段一关闭正常 问题出在Fragment 2上。
我把调试器放在 onCloseSonar
并试图独立识别。它正在加紧 this._oSonareDialog()
并返回对话框对象,但当调用 close()
画面挂起,对话框无法关闭。
如果你想通过oEvent关闭对话框。
onCloseSonar: function(oEvent) {
oEvent.getSource().getParent().close();
}