var bind = function(attr) {
    var model = function(arg) {
        for (var p in attr) {
            this[p] = attr[p];
        }
        this.events = this.events || {};
        this.initialize && this.initialize(arg);
    }
    model.prototype.get = function(name) {
        return this[name] || '';
    };
    model.prototype.set = function(attr) {
        var pool = {},
        hdl;
        for (var p in attr) {
            var arr = p.split('.'),
            len = arr.length,
            first = arr[0],
            last = arr[len - 1],
            hash = this,
            i = -1;
            while (++i < len - 1) {
                hash = hash[arr[i]] = hash[arr[i]] || {};
            }
            hash[last] !== attr[p] && (hash[last] = attr[p], pool[first] = this[first]);
        }
        for (var p in pool) { (hdl = this.events[p]) && this[hdl](pool[p]);
        }
    };
    model.prototype.save = function() {};
    model.prototype.fetch = function() {};
    return model;
};