[OpenLayers-Users] mapfish - openlayers - extjs - jquery usage problems

Pierre GIRAUD bluecarto at gmail.com
Thu Mar 12 11:47:43 EDT 2009


Hi Fabio,

This might be stupid but did you try the following ?

var map = new OpenLayers.Map('map');

OpenLayers.Map constructor can be given either a DOM Element or the id
of a DOM Element.

Hope this helps,
Pierre


On Wed, Mar 11, 2009 at 5:46 PM, Fabio D'Ovidio <fabiodovidio at gmail.com> wrote:
> Hello,
> in order to use jquery library toghether with mapfish client i try to
> summarize the problems related to:
>
>    * $ function definition in OpenLayers
>    * Extjs usage with jquery
>
> OpenLayers uses part of prototype library (without include it) in the
> following files:
>
>    * Util.js
>    * Ajax.js
>    * Events.js
>    * Calss.js
>
> In particular in Util.js $ function is defined as following:
> /**
>  * Maintain $() from prototype
>  */
> if ($ == null) {
>    var $ = OpenLayers.Util.getElement;
> }
>
> jQuery library also define a $ function as: $ = jQuery
>
> Than, jQuery library is shipped with ExtJS, and MapFish ships with
> ExtJS. In particular ExtJS does not load jQuery dynamically, you need to
> include it in your HTML
> with script tags in this order:
>
>   1. jquery.js
>   2. ext-jquery-adapter.js
>   3. ext-all.js (or your choice of files)
>
> Now, my HTML script with script tags is as following:
>
>    viewport:null;
>    map:null;
>
>    // reference local blank image
>    Ext.BLANK_IMAGE_URL = '../../mfbase/ext/resources/images/default/s.gif';
>
>    Ext.onReady(function(){
>
>        var map = new OpenLayers.Map(*$('map')*);
>        this.map = map;
>
>        var wms = new OpenLayers.Layer.WMS("OpenLayers WMS",
>            "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'},
> {buffer: 0});
>
>        map.addLayers([wms]);
>        map.addControl(new OpenLayers.Control.LayerSwitcher());
>        map.setCenter(new OpenLayers.LonLat(17, 2), 2);
>
>      var window = new Ext.Window({
>            title: 'Map',
>            width: 500,
>            height: 300,
>            minWidth: 300,
>            minHeight: 200,
>            layout: 'fit',
>            plain: true,
>            bodyStyle: 'padding:5px;',
>            items: [{
>                xtype: 'mapcomponent',
>                map: map
>            }]
>        });
>        window.show();
>
> });
>
> and obviously I have a div in HTML template to display the map:
>
>  <div id="map"></div>
>
> For all these reasons I must solve two problems:
>
>   1. re-name $ function in Util.js
>   2. include js files in the correct way to use mapfish with jQuery
>
> So I try in this way:
>
>   1. I changed Util.js like this:
>
>      var jq = OpenLayers.Util.getElement;
>
>      and my script become:
>
>          viewport:null;
>          map:null;
>
>          // reference local blank image
>          Ext.BLANK_IMAGE_URL =
>      '../../mfbase/ext/resources/images/default/s.gif';
>
>          Ext.onReady(function(){
>
>              var map = new OpenLayers.Map(*jq('map')*);
>              this.map = map;
>
>              var wms = new OpenLayers.Layer.WMS("OpenLayers WMS",
>                  "http://labs.metacarta.com/wms/vmap0", {layers:
>      'basic'}, {buffer: 0});
>
>              map.addLayers([wms]);
>              map.addControl(new OpenLayers.Control.LayerSwitcher());
>              map.setCenter(new OpenLayers.LonLat(17, 2), 2);
>
>            var window = new Ext.Window({
>                  title: 'Map',
>                  width: 500,
>                  height: 300,
>                  minWidth: 300,
>                  minHeight: 200,
>                  layout: 'fit',
>                  plain: true,
>                  bodyStyle: 'padding:5px;',
>                  items: [{
>                      xtype: 'mapcomponent',
>                      map: map
>                  }]
>              });
>              window.show();
>
>      });
>
>
>      (I tryed also using *jQuery.noConflict();* before my script
>      without changing Util.js file)
>
>   2. I included in my script JS files in this order:
>      jquery.js,\
>      ext-jquery-adapter.js,\
>      ext-all.js
>
> and the error is:
> "A[C.xtype || D] is not a constructor"
> that deals with ExtJS (maybe on onReady event, I read this post:
> http://extjs.com/forum/showthread.php?t=53502&highlight=onready+onload)
>
> If I don't chage Util.js (or use *jQuery.noConflict() function*) I have
> the following error:
>
> "this.div.appendChild is not a function"
>
> because:
> 1) I load up jQuery, this defines the $ function
> 2) I load OpenLayers, this checks if $ exists, and because it does exist,
> it is not redefined in the OL (prototype) way
> 3) I initialize my map and send it the string 'map' as the first
> argument
> 4) OpenLayers tries to place your map in the DOM element $('map'), but
> because $() is still a jQuery function that doesn't return a DOM element,
> and I get the error about appendChild not being defined!
>
> How can I solve these problems? :-(
> Please, help me if you can :-)
>
> Thank you very much!!
>
> --
> Fabio D'Ovidio
> Geospatial solutions
>
> INOVA s.r.l.
> Web : http://www.inovaos.it
> Tel.: 081 197 57 600
> mail: fabiodovidio at gmail.com
>
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users
>



-- 
Pierre GIRAUD
http://www.camptocamp.com



More information about the Users mailing list