[OpenLayers-Dev] @require issue with XHR code

Tim Schaub tschaub at opengeo.org
Tue Jun 10 11:07:58 EDT 2008


Hey-

Christopher Schmidt wrote:
> On Tue, Jun 10, 2008 at 04:11:36PM +0200, Eric Lemoine wrote:
>> Hi
>>
>> There's a dependency issue with the new XHR code.
>>
>> If you have A.js that uses say Request.GET, in A.js you will use:
>>
>> /*
>>  * @requires OpenLayers/Request.js
>>  */
>>
>> The thing is that Request.js doesn't include "@require
>> OpenLayers/Request/XMLHttpRequest.js", so the built file won't include
>> the XMLHttpRequest code, which is problematic.
>>
>> Adding "@require OpenLayers/Request/XMLHttpRequest.js" to Request.js
>> comes up with its own problem: a circular reference. Yes,
>> XMLHttpRequest.js does include "@require OpenLayers/Request.js". And
>> if we remove that @require in XMLHttpRequest.js, it doesn't work
>> either, because XMLHttpRequest.js does require Request.js when its
>> main anonymous function is executed.
>>
>> One solution to this entire issue might be use
>>
>> /*
>>  * @requires OpenLayers/Request/XMLHttpRequest.js
>>  */
>>
>> everywhere the Request object is used. But it's a bit confusing.
>>
>> Any other idea?
> 
> Another solution is to update the build tools to do something smarter
> with circular dependancies. This really all comes down to the fact that
> there is no seperation between "requires-at-build-time" vs. "requires at
> run-time" -- dependancies were (originally) about build time, but as the
> build system and requirements have gotten more complicated, there has
> been a need to make that more about run time instead.
> 
> Seperating out the two is a project that probably needs doing.
> 
> Regards,

Yeah, I was going to suggest

@requires - Target script must be included before this one.
@include - Target script must be included somewhere in the build.

For now, requires XMLHttpRequest.js is a good solution.  (There are 
other places where we don't have @requires because of this circular 
conflict - Format.WKT should include the Geometry subclasses, but it 
doesn't because those require Geometry and Geometry requires Format.WKT.)

Tim





More information about the Dev mailing list