onCloseDialog event not working in my Controller. What's wrong with my code?

断了今生、忘了曾经 提交于 2019-12-24 00:35:28

问题


I'm trying to learn SAPUI5 and following the walkthrough in SAPUI5 documentation. I'm currently in Step 17: Fragment Callbacks. I am not able to make the onCloseDialog event work. The code I double and triple checked and I could not find anything wrong. There is also no error in Chrome's console. Any insights?

Link to the guide I'm following:

https://sapui5.hana.ondemand.com/#/topic/354f98ed2b514ba9960556333428d35e

My code for:

HelloDialog.fragment.xml

<core:FragmentDefinition xmlns="sap.m" xmlns:core="sap.ui.core">
<Dialog id="helloDialog" title="Hello {/recipient/name}">
    <content>
        <core:Icon src="sap-icon://hello-world" size="8rem" class="sapUiMediumMargin"/>
    </content>
    <beginButton>
        <Button text="{i18n>dialogCloseButtonText}" press="onCloseDialog"/>
    </beginButton>
</Dialog>

My code for: HelloPanel.controller.js

sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/m/MessageToast"
], function(Controller, MessageToast) {
"use strict";
return Controller.extend("sap.ui.demo.wt.controller.HelloPanel", {
    onShowHello: function() {
        // read msg from i18n model
        var oBundle = this.getView().getModel("i18n").getResourceBundle();
        var sRecipient = this.getView().getModel().getProperty("/recipient/name");
        var sMsg = oBundle.getText("helloMsg", [sRecipient]);
        // show message
        MessageToast.show(sMsg);
    },
    onOpenDialog: function() {
        var oView = this.getView();
        var oDialog = oView.byId("helloDialog");
        // create dialog lazily
        if (!oDialog) {
            // create dialog via fragment factory
            oDialog = sap.ui.xmlfragment(oView.getId(), "sap.ui.demo.wt.view.HelloDialog");
            oView.addDependent(oDialog);
        }


        oDialog.open();
    },
    onCloseDialog: function() {
        this.getView().byId("helloDialog").close();
    }
});
});

回答1:


You missed to pass the controller reference when creating the dialog from the fragment. In case of the Walkthrough step, it's the same controller object as the dialog caller, so this should be passed:

oDialog = sap.ui.xmlfragment(oView.getId(), "sap.ui.demo.wt.view.HelloDialog", this);

a Controller to be used for event handlers in the Fragmen


  • API Reference of sap.ui.xmlfragment
  • Also worth checking: How to Access Elements from XML Fragment by ID


来源:https://stackoverflow.com/questions/48608035/onclosedialog-event-not-working-in-my-controller-whats-wrong-with-my-code

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!