[OpenLayers-Users] Receive "Uncaught TypeError" from OpenLayers.Event.observe method when zoom in while processing WMS request from previous zoom operation

Stephen Brooke sbrooke at mdacorporation.com
Tue Oct 21 22:00:04 PDT 2014


Hi list,
I am using OpenLayers 2.13.1.

I am experiencing a problem when zoom in/out while OpenLayers is in process of loading images from several WMS requests that resulted from a previous zoom operation.

Uncaught TypeError: Cannot read property '_eventCacheID' of null                         OpenLayers.debug.js:5178
OpenLayers.Event.observe                                                                                                        OpenLayers.debug.js:5178
tile.onLoadEnd                                                                                                                                 OpenLayers.debug.js:31046
OpenLayers.Events.OpenLayers.Class.triggerEvent                                                                        OpenLayers.debug.js:5812
OpenLayers.Tile.OpenLayers.Class.unload                                                                          OpenLayers.debug.js:29266
OpenLayers.Tile.Image.OpenLayers.Class.draw                                                                OpenLayers.debug.js:29584
OpenLayers.Layer.Grid.OpenLayers.Class.initGriddedTiles                                          OpenLayers.debug.js:30957
OpenLayers.Layer.Grid.OpenLayers.Class.moveTo                                                         OpenLayers.debug.js:30428
OpenLayers.Map.OpenLayers.Class.moveTo                                                                     OpenLayers.debug.js:9299
map.zoomTween.start.callbacks.done                                                                                  OpenLayers.debug.js:9682
OpenLayers.Tween.OpenLayers.Class.stop                                                                        OpenLayers.debug.js:6697
OpenLayers.Tween.OpenLayers.Class.play                                                                         OpenLayers.debug.js:6730
(anonymous function)                                                                                                                  OpenLayers.debug.js:615
loops.(anonymous function)                                                                                                     OpenLayers.debug.js:6528


I am having an extremely difficult time trying to determine what my app is doing to make OpenLayers react this way.  The effect of the error is that zoom in/out capability breaks on the map until I reload the page.
Can someone enlighten me as to what may be going on here?


More background on the problem:
============================
One way I have been able to avoid the problem, although it is not an acceptable solution, is to add the following code near the top of the "OpenLayers.Event.observe" method:

        if (element == null){
                //console.log("element: " + element + ", name: " + name + ", observer: " + observer + ", " + "useCapture: " + useCapture);
                return;
        }

Like this:

    /**
     * Method: observe
     *
     * Parameters:
     * elementParam - {DOMElement || String}
     * name - {String}
     * observer - {function}
     * useCapture - {Boolean}
     */
    observe: function(elementParam, name, observer, useCapture) {
        var element = OpenLayers.Util.getElement(elementParam);
        useCapture = useCapture || false;

       //Begin added lines
        if (element == null){
                //console.log("element: " + element + ", name: " + name + ", observer: " + observer + ", " + "useCapture: " + useCapture);
                return;
        }
       //End added lines

        if (name == 'keypress' &&
           (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
           || element.attachEvent)) {
            name = 'keydown';
        }

        //if observers cache has not yet been created, create it
        if (!this.observers) {
            this.observers = {};
        }

        //if not already assigned, make a new unique cache ID
        if (!element._eventCacheID) {                         <=============== This is the line the error occurs because "element" is null
            var idPrefix = "eventCacheID_";
            if (element.id) {
                idPrefix = element.id + "_" + idPrefix;
            }
            element._eventCacheID = OpenLayers.Util.createUniqueID(idPrefix);
        }


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/openlayers-users/attachments/20141022/a6e14be1/attachment-0001.html>


More information about the Users mailing list