[OpenLayers-Dev] 2.10 and 2.11-RC1 OpenLayers.Class behavior changes

RICHARD Didier didier.richard at ign.fr
Wed Aug 3 08:06:17 EDT 2011


> On Tue, Aug 2, 2011 at 3:23 PM, RICHARD Didier <didier.richard at ign.fr>
> wrote:
>>
>>> On Tue, Aug 2, 2011 at 12:54 PM, RICHARD Didier <didier.richard at ign.fr>
>>> wrote:
>>>>
>>>>>> This test has been ran on FF successfully.
>>>>>
>>>>> I haven't looked at your tests into detail, but do mean your problems
>>>>> are now solved?
>>>>>
>>>>
>>>> no, just meant it works with OL 2.11 under FF ... I have got problems
>>>> with
>>>> OL 2.10 !
>>>
>>> I fail to see where you're having problem. Sorry.
>>>
>>
>> What about these cases ?
>>
>> 1/ var A= OpenLayers.Class({...})
>> A.staticFunction= function() { ... };
>> A= overload(A, { initialize: function() {...}});
>
> See my changes to the overload function, and test_overload_6.
>

Ok, this works for me too (OL 2.10/2.11-rc1)

>>
>> 2/ in test 4, if you remove the initialize function from B and overload
>> A,
>> the B constructor is still the previous A's constructor.
>
> Yes. To address this one I see no other solution than patching
> OpenLayers.Class. See the patch attached to this email, and my
> test_overload_5 test function. The Class.html tests continue to pass
> with my patch.
>

this works in OL 2.11, not in OL 2.10 for me !-(
I guess there is something similar to do in OL 2.10 ?


Regards,

didier

>
>
> <html>
> <head>
>   <!--<script
> src="http://openlayers.org/api/2.10/OpenLayers.js"></script>-->
>   <!--<script src="http://openlayers.org/dev/OpenLayers.js"></script>-->
>   <script src="OLLoader.js"></script>
>   <script type="text/javascript">
>
>     // the overload function under test
>     function overload(C, o) {
>         if(typeof o.initialize === "function" &&
>             C === C.prototype.initialize) {
>             // OL 2.11
>
>             var proto = C.prototype;
>             var staticProps = OpenLayers.Util.extend({}, C);
>
>             C = o.initialize;
>
>             C.prototype = proto;
>             OpenLayers.Util.extend(C, staticProps);
>         }
>         OpenLayers.Util.extend(C.prototype, o);
>         return C;
>     }
>
>     function test_overload_1(t) {
>         // overload constructor
>         t.plan(1);
>         var A = OpenLayers.Class({
>             initialize: function() {
>                 this.a = "foo";
>             }
>         });
>         A = overload(A, {
>             initialize: function() {
>                 this.a = "bar";
>             }
>         });
>         var a = new A;
>         t.eq(a.a, "bar", "ctor overloaded");
>     }
>
>     function test_overload_2(t) {
>         // overload regular method
>         t.plan(1);
>         var A = OpenLayers.Class({
>             initialize: function() {
>             },
>             method: function() {
>                 this.a = "foo";
>             }
>         });
>         A = overload(A, {
>             method: function() {
>                 this.a = "bar";
>             }
>         });
>         var a = new A;
>         a.method();
>         t.eq(a.a, "bar", "method overloaded");
>     }
>
>     function test_overload_3(t) {
>         // overload constructor of subclass
>         t.plan(1);
>         var A = OpenLayers.Class({
>             initialize: function() {
>                 this.a = "foo";
>             }
>         });
>         var B = OpenLayers.Class(A, {
>             initialize: function() {
>                 A.prototype.initialize.call(this);
>             }
>         });
>         B = overload(B, {
>             initialize: function() {
>                 A.prototype.initialize.call(this);
>                 this.a = "bar";
>             }
>         });
>         var b = new B;
>         t.eq(b.a, "bar", "ctor overloaded");
>     }
>
>     function test_overload_4(t) {
>         // overload constructor of parent class
>         t.plan(1);
>         var A = OpenLayers.Class({
>             initialize: function() {
>                 this.a = "foo";
>             }
>         });
>         var B = OpenLayers.Class(A, {
>             initialize: function() {
>                 A.prototype.initialize.call(this);
>             }
>         });
>         A = overload(A, {
>             initialize: function() {
>                 this.a = "bar";
>             }
>         });
>         var b = new B;
>         t.eq(b.a, "bar", "ctor overloaded");
>     }
>
>     function test_overload_5(t) {
>         // overload constructor of parent class
>         t.plan(1);
>         var A = OpenLayers.Class({
>             initialize: function() {
>                 this.a = "foo";
>             }
>         });
>         var B = OpenLayers.Class(A, {});
>         A = overload(A, {
>             initialize: function() {
>                 this.a = "bar";
>             }
>         });
>         var b = new B;
>         t.eq(b.a, "bar", "ctor overloaded");
>     }
>
>     function test_overload_6(t) {
>         // with static methods
>         t.plan(1);
>         var A = OpenLayers.Class({
>             initialize: function() {
>             }
>         });
>         A.staticMethod = function() {};
>         A = overload(A, {
>             initialize: function() {
>             }
>         });
>         var exc = false;
>         try {
>             A.staticMethod();
>         } catch(e) {
>             exc = true;
>         }
>         t.ok(!exc, "static method still there");
>     }
>
>   </script>
> </head>
> <body>
> </body>
> </html>
>
>
> --
> Eric Lemoine
>
> Camptocamp France SAS
> Savoie Technolac, BP 352
> 73377 Le Bourget du Lac, Cedex
>
> Tel : 00 33 4 79 44 44 96
> Mail : eric.lemoine at camptocamp.com
> http://www.camptocamp.com
>


-- 
RICHARD Didier - Chef du pôle technique du Géoportail
2/4, avenue Pasteur - 94165 Saint Mandé Cedex
Tél : +33 (0) 1 43 98 83 23


More information about the Dev mailing list