• Jump To … +
    can.construct.proxy.js can.construct.super.js can.control.plugin.js can.dojo.js can.fixture.js can.jquery-all.js can.jquery.js can.model.queue.js can.mootools.js can.observe.attributes.js can.observe.backup.js can.observe.delegate.js can.observe.setter.js can.observe.validations.js can.view.modifiers.js can.view.mustache.js can.yui.js can.zepto.js
  • can.observe.setter.js

  • ¶
    /*!
    * CanJS - 1.1.5 (2013-03-27)
    * http://canjs.us/
    * Copyright (c) 2013 Bitovi
    * Licensed MIT
    */
    (function (can, window, undefined) {
  • ¶

    can/observe/setter/setter.js

        can.classize = function (s, join) {
  • ¶

    this can be moved out .. used for getter setter

            var parts = s.split(can.undHash),
                i = 0;
            for (; i < parts.length; i++) {
                parts[i] = can.capitalize(parts[i]);
            }
    
            return parts.join(join || '');
        }
    
        var classize = can.classize,
            proto = can.Observe.prototype,
            old = proto.__set;
    
        proto.__set = function (prop, value, current, success, error) {
  • ¶

    check if there's a setter

            var cap = classize(prop),
                setName = "set" + cap,
                errorCallback = function (errors) {
                    var stub = error && error.call(self, errors);
  • ¶

    if 'setter' is on the page it will trigger the error itself and we dont want to trigger the event twice. :)

                    if (stub !== false) {
                        can.trigger(self, "error", [prop, errors], true);
                    }
    
                    return false;
                },
                self = this;
  • ¶

    if we have a setter

            if (this[setName] &&
  • ¶

    call the setter, if returned value is undefined, this means the setter is async so we do not call update property and return right away

            (value = this[setName](value, function (value) {
                old.call(self, prop, value, current, success, errorCallback)
            }, errorCallback)) === undefined) {
                return;
            }
    
            old.call(self, prop, value, current, success, errorCallback);
    
            return this;
        };
    
    })(can, this);