Binding

by neonp

HTML

<div id="toto">
</div>
<input id="pwet" />
<input id="color" />

JavaScript

(function($) {
    var eventNameChangingField = "fieldChanging",
        eventNameChangedField = "fieldChanged";
    eventNameBindingError = "bindingError";
    Binding = function() {
        this.getValue = function() {
            var parts = this.expression.split('.');
            var value = this.target;
            for (var i = 0; i < parts.length; i++) {
                value = value[parts[i]];
            }
            return value;
        };
        this.apply = function(elements, doNotRegisterEvents) {
            var binding = this;
            var val = binding.getValue();
            var inputs = elements.filter(':input').val(val)
            if (!doNotRegisterEvents) inputs.change(function() {
                binding.setValue($(this).val(), this);
            });
            elements.filter(':not(:input))').text(val);
        };
        this.setValue = function(value, source, doNotTriggerEvents) {
            var target = this.target;
            var parts = this.expression.split(".");
            if (parts.length > 1) {
                try {
                    var binding = new Binding();
                    binding.target = $(target).getBinding(parts[0]).getValue();
                    parts.shift();
                    binding.expression = parts.join('.');
                    binding.setValue(value, source, doNotTriggerEvents);
                }
                catch (ex) {
                    $(document).triggerHandler(eventNameBindingError, {
                        target: target,
                        field: this.expression,
                        Exception: ex
                    });
                }
            }
            else {
                try {
                    var $target = $(target);
                    var eventArgs = {
                        cancel: false,
                        fieldName: parts[0],
                        source: source
                    };
                    if (!doNotTriggerEvents)...