对话框片段关闭不起作用 - 对话框关闭时挂起。

问题描述 投票:-1回答:1

enter image description here

有两个片段。

  • 片段1是在那4个表格单元格上调用的,点击
  • 片段2在最后一个单元格点击时被调用

片段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()画面挂起,对话框无法关闭。

sapui5
1个回答
-2
投票

如果你想通过oEvent关闭对话框。

        onCloseSonar: function(oEvent) {
        oEvent.getSource().getParent().close();
        }
© www.soinside.com 2019 - 2024. All rights reserved.