有没有办法使这个"未定义"的对象安全?



在 Web 应用程序的页面上,用户离开文本字段后,加载屏幕/小部件继续显示。

该应用程序使用的是版本 1.6.0.3。 我查看了最新版本的原型1.7.3,但没有找到该功能。

调用此方法时,我还测试了其他实例。 如果没有用户输入,则小部件不会挂起。

此错误会显示在 Chrome 开发者工具的控制台中。

    at E (framework.pack.js:1699)
    at Function.stopObserving (framework.pack.js:1732)
    at A.hide (ui.pack.js:13410)
    at A.render (ui.pack.js:13591)
    at A.updateChoices (ui.pack.js:13650)
    at A.onComplete (ui.pack.js:13786)
    at Object.oncomplete (framework.pack.js:76)
    at framework.pack.js:2748

有问题的具体方法似乎在原型中.js文件 this =>

        if (element._prototypeEventID) return element._prototypeEventID[0];
        arguments.callee.id = arguments.callee.id || 1;
    return element._prototypeEventID = [++arguments.callee.id];
    }

我希望加载小部件在保存完成后消失,但它仍在页面上。 Chrome开发者工具的控制台也有第二个错误:

validateFormCheck @ common.js:1031

看起来getEventID方法正在触发undefined警告/错误的地方调用。

在版本 1.6.0.3 中,getEventID 仅在 createWrapperstopObserving 中调用,我看到 stopObserve 在您发布的调用堆栈中,所以让我们继续那个。

stopObserving() 采用 1 个必需参数和 2 个可选参数(元素、eventName、处理程序(,如果您只将元素传递给它查找它的函数,然后删除附加到该元素的所有 PrototypeJS 观察器。如果您同时传递事件名称和/或处理程序,则 stopObserve 只会专门删除您告诉它的观察者。

话虽如此,如果在调用 DOM 之前从 DOM 中删除stopObserving这可能会导致您看到的错误。

2个可行的修复程序

  • 将呼叫移动到stopObserving()上方的呼叫移动到remove()
  • 注释掉对stopObserving()的调用,看看页面的行为是否符合您的要求

最新更新