【问题标题】:attachEventOnce() leads to "undefined is not a function"attachEventOnce() 导致“未定义不是函数”
【发布时间】:2015-05-28 12:00:21
【问题描述】:

best practice guide 之后,我收到一个错误“Uncaught TypeError: undefined is not a function”。

通过大量的console.logs,我发现在以下代码行中抛出了这个错误(在控制台中匿名):

oView.getElementBinding().attachEventOnce(....)

AttachEventOnce() 是导致问题的函数。你知道如何解决这个问题或进一步调试吗?

代码块:

        oView.getElementBinding().attachEventOnce("dataReceived", jQuery.proxy(function () {

            var oData = oView.getModel().getData(sReportPath);
            if (!oData) {
                sap.ui.core.UIComponent.getRouterFor(this).myNavToWithoutHash({
                    currentView : oView,
                    targetViewName : "namespace.view.NotFound",
                    targetViewType : "XML"
                });
            }
        }, this));

引自最佳实践指南:

          // Check that the product specified actually was found
          oView.getElementBinding().attachEventOnce("dataReceived", jQuery.proxy(function() {
              var oData = oView.getModel().getData(sProductPath);
              if (!oData) {
                  sap.ui.core.UIComponent.getRouterFor(this).myNavToWithoutHash({
                      currentView : oView,
                      targetViewName : "sap.ui.demo.tdg.view.NotFound",
                      targetViewType : "XML"
                  });
              }
          }, this));

这整个事情是在“routeMatched”部分触发的。

【问题讨论】:

  • 之前发生了什么?在最佳实践指南中,此调用之前有一些内容。您是否尝试过 Chrome 的异常停止功能?
  • @matbtt 我想我找到了错误。这是 OData 后端的问题。我没有实现“readEntity”……啊,没关系,检查我的答案;P

标签: javascript model-view-controller url-routing sapui5


【解决方案1】:

由于绑定上下文引用了一个特定的实体,它无限地“延迟”(~循环)。

但是,绑定首先使用以下方法:

  • 将所有内容绑定到控件
  • 使用绑定列表中的第一项(无论是什么)

但一旦点击不同的控件并触发上述代码行,绑定就会更改为特定实体 (http://odataservice/entity('WithASpecificKey'))。

问题是,如果您尚未在 OData 服务中实现“readEntity”方法,您将遇到此错误。乍一看似乎很奇怪,因为它在初始方法上有效,但在点击后无效。这就是为什么它是/有点连线调试的原因。

我所做的是在 OData 服务中正确实现了“readEntity”方法。

【讨论】:

    【解决方案2】:

    attachEventOnce() 似乎不是 JavaScript 的标准部分(您可以通过打开 JS 控制台并在页面上选择一些任意元素并运行 object.attachEventOnce() === undefined; 来验证这一点。)我打赌这个标准指南在文中较早地对其进行了定义。看来one() 可能是您想要的功能。

    【讨论】:

    • 函数 attachEventOnce 定义在 SAPUI5/OpenUI5 EventProvider 对象中。由于绑定扩展了此对象,因此该功能应可用。
    猜你喜欢
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 2018-05-27
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多