[fusion-users] Weird things are happening.

Chris Claydon chris.claydon at autodesk.com
Mon Jun 2 15:18:45 EDT 2008


Hi Tómas,

Do you have Firefox and Firebug installed? They make it easy to track down issues such as this one. In this case, you've set up the binding to the handleGroups function using this code:

                Event.observe(input, 'click', this.handleGroups.bind('gotur',null));

If you put a breakpoint in Firebug inside the handleGroups function, you'll see that the 'this' object points to the string 'gotur', so it is not possible to call this.testFunction().

If you change the line above to read:

                Event.observe(input, 'click', this.handleGroups.bind(this,null));

Then it should be possible to call this.testFunction() from within the handleGroups function.

I hope that helps,

Chris.



From: Tómas Guðmundsson [mailto:tomas at snertill.is]
Sent: June 2, 2008 9:57 AM
To: Chris Claydon
Subject: RE: [fusion-users] Weird things are happening.

Yeah sure.

/**
 * Fusion.Widget.InformationPanel
 */
 /*****************************************************************************
 * Class: Fusion.Widget.InformationPanel
 * © Snertill ehf.
 * Author : Tomas Gudmundsson
 * Date: 2008/06/02
 * A widget to display information.
 ****************************************************************************/

Fusion.Widget.Information = Class.create();
Fusion.Widget.Information.prototype =
{
    map : null,
    initialize : function(widgetTag) {
                Object.inheritFrom(this, Fusion.Widget.prototype, [widgetTag, false]);
        //console.log('InformationPanel.initialize');
        var json = widgetTag.extension;
        //console.log(widgetTag);

        var source = '../../../widgets/php/InformationPanel.php';
        var a = new Ajax.Request( source, Object.extend({
                                                method:'get',
                                                onSuccess: this.contentLoaded.bind(this) }));



                //this.domObj.innerHTML = a.transport.responseText;
        //this.domObj.appendChild(a.respon);
        map = this.getMap();
    },
    contentLoaded : function(response) {
                this.domObj.innerHTML = response.responseText;
                this.appendLayerSwitch();
    },


    appendLayerSwitch : function() {
                var input,span,div;
                div = document.createElement('div');
                span = document.createElement('span');
                input = document.createElement('input');
                div.setAttribute('class','layerSwitch');
                span.setAttribute('id','layerSwitchText');
                span.innerHTML = 'Layer On/Off';
                input.setAttribute('type','checkbox');
                input.setAttribute('name','chbLayerOnOff');
                Event.observe(input, 'click', this.handleGroups.bind('gotur',null));

                div.appendChild(input);
                div.appendChild(span);
                this.domObj.appendChild(div);
    },

    handleGroups : function (group, layerName) {
       console.log(group);
       console.log(layerName);
       this.testFunction();
    },

    processGroups: function (group, layerName) {
                var startGroup = map.layerRoot;
                if (group != null) {
                  startGroup = group;

                }
                this.testFunction();
                for(var i =0; i < startGroup.groups.length; i++) {
                  this.processGroups(startGroup.groups[i]);
                }

                for(var i = 0; i < startGroup.layers.length; i++) {
                  if (startGroup.layers[i].name == layerName) {
                    if (startGroup.layers[i].visible == true) {
                      startGroup.layers[i].hide();
                    } else {
                      startGroup.layers[i].show();
                    }
                  }
                }
    },

    testFunction : function() {
      console.log('not working idiot, what are you doing wrong!');
    },
/*
 a way to get some layers and turning them on or off.
    if(this.map.getActiveLayer())
    {
      console.log(this.map.getActiveLayer().name);
      this.map.getActiveLayer().hide();
    }
    var startGroup = this.map.layerRoot;
    if (!this.showMapFolder) {
      startGroup = this.map.layerRoot.groups[0];
    }

    console.log(startGroup.groups.length);
    for (var i=0; i<startGroup.layers.length; i++) {
      console.log(startGroup.groups.name);
    }
*/
};

From: Chris Claydon [mailto:chris.claydon at autodesk.com]
Sent: 2. júní 2008 15:53
To: Tómas Guðmundsson
Subject: RE: [fusion-users] Weird things are happening.

Are all these methods defined inside the same prototype class definition? Can you send out the content for the whole file, to put these methods in context?

From: fusion-users-bounces at lists.osgeo.org [mailto:fusion-users-bounces at lists.osgeo.org] On Behalf Of Tómas Guðmundsson
Sent: June 2, 2008 9:09 AM
To: fusion-users at lists.osgeo.org
Subject: [fusion-users] Weird things are happening.

Hi all.

Let me start by saying that I have, cleared my cache and private settings, restarted Firefox, restarted MapGuide and restarted my computer in order to get the newest version of my file to work, but all I needed after a single change is a refresh (to a .js file). Now, I have this function that is similar to the ones in Legend so maybe someone can just point real quick and tell me, here you go.  But there is something I don't know why is happening but I keep getting "testFunction() is not a function" when it get's called from only one function.

This is my function:
    testFunction : function() {
      console.log('not working idiot, what are you doing wrong!');
    },

Here are two function calling it.
    contentLoaded : function(response) {
                this.domObj.innerHTML = response.responseText;
                this.appendLayerSwitch();
                this.testFunction();
    },

    handleClick : function(layer) {
        var startGroup = map.layerRoot;
        if (!this.showMapFolder) {
          startGroup = map.layerRoot.groups[0];
        }

        this.testFunction(); // *
        for(var i=0; i<startGroup.groups.length; i++) {
          this.handleClick(layer); // **
        }
    },

In the handleClick function I get errors for both (*) and (**) and I don't know why. Maybe I can]t see my error because I'm really, really tired after this weekend so any help is appreciated. I've even tried rewriting all functions.

Regards
Tómas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/fusion-users/attachments/20080602/624b5187/attachment-0001.html


More information about the fusion-users mailing list