Wednesday, August 31, 2011

Adding Sproutcore KVO to OpenLayers - More Automation - Part 3

I have showed in the previous post how to add KVO to OpenLayers objects and then connect these objects to inputs, etc.
The approach was unfortunately troublesome because each OpenLayers object had to be programmatically augmented through a SC.mixin call. In this post I will show how the OpenLayers source can be patched to make the augmentation process built-in. The only modification that needs be done is in Class.js where the OpenLayers.Class function must be modified as follows:

OpenLayers.Class = function() {
    var len = arguments.length;
    var P = arguments[0];
    var F = arguments[len-1];

    var C=null;
    if(typeof F.initialize == "function") {
        if (!F.__my_init) {
            F.__my_init = F.initialize
            F.initialize = function() {
                        F.__my_init.apply(this,arguments);
                        SC.mixin(this, SC.Observable);
            };
        }
        C = F.initialize;
    } else {
        C = function() { P.prototype.initialize.apply(this, arguments); SC.mixin(this, SC.Observable); };
    }

    if (len > 1) {
        var newArgs = [C, P].concat(
                Array.prototype.slice.call(arguments).slice(1, len-1), F);
        OpenLayers.inherit.apply(null, newArgs);
    } else {
        C.prototype = F;
    }

    return C;
};

Remember to rebuild OL defore deployment in production environments.


No comments: