matschaffer / jquery_attr_accessor

An implementation of ruby style member accessors as a jquery plugin.

javallone (author)
Mon Apr 20 13:14:11 -0700 2009
matschaffer (committer)
Mon Apr 20 13:16:17 -0700 2009
jquery_attr_accessor / attr_accessor.js
100644 44 lines (36 sloc) 0.962 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
(function($) {
var attr_name = function(name) { return '_' + name; }
var getter_name = function(name) { return '_get' + attr_name(name); }
var setter_name = function(name) { return '_set' + attr_name(name); }
 
var attr_method = function(name) {
return function() {
var method = (arguments.length == 0) ? getter_name(name) : setter_name(name);
return this[method].apply(this, arguments);
}
}
 
$.fn.extend({
attr_accessor: function(name) {
this.attr_reader(name);
this.attr_writer(name);
 
return this;
},
 
attr_reader: function(name) {
this.each(function() {
this[getter_name(name)] = function() {
return this[attr_name(name)];
}
this[name] = attr_method(name);
});
 
return this;
},
 
attr_writer: function(name) {
this.each(function() {
this[setter_name(name)] = function(x) {
this[attr_name(name)] = x;
}
this[name] = attr_method(name);
});
 
return this;
}
});
})(jQuery);