onCloseDialog事件在我的Controller中不起作用。我的代码出了什么问题?

时间:2018-02-04 12:27:26

标签: sapui5

我正在尝试学习SAPUI5并遵循SAPUI5文档中的演练。我目前正处于第17步:片段回调。我无法使onCloseDialog事件工作。代码我加倍和三重检查,我找不到任何错误。 Chrome的控制台也没有错误。任何见解?

链接到我关注的指南:

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

我的代码:

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>

我的代码: 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 个答案:

答案 0 :(得分:0)

从片段创建对话框时,您错过了传递控制器参考。 如果是Walkthrough步骤,它与对话框调用者的控制器对象相同,因此应传递this

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

一个用于Fragmen中事件处理程序的控制器