错误:oDialog.open不是函数

时间:2018-02-20 17:38:59

标签: sapui5

我在跟踪Walktrough时遇到此错误。我看不出代码有什么问题。

  

HolaPanel.controller.js?eval:28 Uncaught TypeError:oDialog.open不是函数
  在f.openDialog(HolaPanel.controller.js?eval:28)
  在f.a.fireEvent(EventProvider-dbg.js:228)
  在f.a.fireEvent(Element-dbg.js:427)
  在f.firePress(ManagedObjectMetadata-dbg.js:428)
  在f.d.ontap(eval在evalModuleStr(jquery.sap.global-dbg.js:3425),    :820:179)
  在f.a._handleEvent(Element-dbg.js:162)
  在constructor.U._handleEvent(UIArea-dbg.js:828)
  在HTMLBodyElement.dispatch(jquery-dbg.js:4737)
  at g(jquery-mobile-custom-dbg.js:1972)
  在HTMLBodyElement.q(jquery-mobile-custom-dbg.js:2063)
  openDialog @ HolaPanel.controller.js?eval:28
  a.fireEvent @ EventProvider-dbg.js:228
  a.fireEvent @ Element-dbg.js:427
  (匿名)@ ManagedObjectMetadata-dbg.js:428
  d.ontap @ Button-dbg.js:269
  a._handleEvent @ Element-dbg.js:162
  U._handleEvent @ UIArea-dbg.js:828
  dispatch @ jquery-dbg.js:4737
  g @ jquery-mobile-custom-dbg.js:1972
  q @ jquery-mobile-custom-dbg.js:2063
  dispatch @ jquery-dbg.js:4737
  c3.handle @jquery-dbg.js:4549
  触发器@ jquery-dbg.js:7819
  (匿名)@ jquery-dbg.js:7903
  每个@jquery-dbg.js:365
  每个@jquery-dbg.js:137
  触发器@ jquery-dbg.js:7902
  P @ jquery-mobile-custom-dbg.js:1543
  R @ jquery-mobile-custom-dbg.js:1553
  dispatch @ jquery-dbg.js:4737
  c3.handle @jquery-dbg.js:4549

这是我的代码:

<core:FragmentDefinition 
    xmlns:core="sap.ui.core" 
    xmlns:mvc="sap.ui.core.mvc" 
    xmlns="sap.m">
    <Page title="Title">
        <content>
             <Dialog
              id="idDialog"
              title="Bienvenido {/recipient/name}">
                  <Toolbar>
                    <ToolbarSpacer/>
                        <Image
                            busy="false"
                            busyIndicatorDelay="1000"
                            visible="true"
                            src="https://www.kaufmannsf.cl/img/logos/img_kaufmann.png"
                            mode="Image"
                            backgroundSize="cover"/>                
                    <ToolbarSpacer/>
                  </Toolbar>
                   <beginButton>
                     <Button
                        text="{i18n>dialogCloseButtonText}"
                        press="onCloseDialog"/>
                  </beginButton>
              </Dialog>
        </content>
    </Page>
</core:FragmentDefinition>

这是包含对话框的视图的控制器:

openDialog : function () {
    var oView = this.getView();
    var oDialog = oView.byId("idDialog");
    // create dialog lazily
    if (!oDialog) {
        // create dialog via fragment factory
        oDialog = sap.ui.xmlfragment(oView.getId(), "opensap.myapp.view.HelloDialog");
        oView.addDependent(oDialog);
    }
    oDialog.open();
},

onCloseDialog : function() {
    this.getView().byId("idDialog").close();
}

我也有这个错误:

  

无法加载资源:服务器响应状态为404(未找到)sap-ui.core.js

我不知道它是否与另一个有关。

2 个答案:

答案 0 :(得分:1)

您的片段定义了带对话框的页面,但它只应包含对话框。代码失败,因为页面没有打开功能。请调整您的片段定义,并查看manual

<core:FragmentDefinition 
    xmlns:core="sap.ui.core" 
    xmlns="sap.m">
    <Dialog id="idDialog" title="Bienvenido {/recipient/name}">
         ...
    </Dialog>
</core:FragmentDefinition>

答案 1 :(得分:0)

As @matbtt said, <Page>在尝试打开时杀死了执行。正如他所说,删除片段中的<Page>

然后,要访问onCloseDialog事件处理程序,需要在使用sap.ui.xmlfragment工厂函数对其进行实例化时将控制器传递给Dialog。

只需添加this作为第三个参数:

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