Ox.List: make value method accept (id, {key: value})

This commit is contained in:
rolux 2013-12-01 14:54:42 +01:00
parent 41af852f17
commit a5baff8319

View file

@ -1794,24 +1794,26 @@ Ox.List = function(options, self) {
/*@ /*@
value <f> get/set list value value <f> get/set list value
(id, {key: value, ...}) -> <f> sets value, returns List Element
(id, key, value) -> <f> sets value, returns List Element (id, key, value) -> <f> sets value, returns List Element
(id, key) -> <a> returns value (id, key) -> <a> returns value
(id) -> <o> returns all values of id (id) -> <o> returns all values of id
id <s> id of item id <s|n> id of item (or a number, will be interpreted as position)
key <s> key if item property key <s> key if item property
value <*> value, can be whatever that property is value <*> value, can be whatever that property is
@*/ @*/
// FIXME: this should accept {key: value, ...} too that.value = function() {
that.value = function(id, key, value) { var args = Ox.slice(arguments),
// id can be a number and will then be interpreted as position id = args.shift(),
var pos = Ox.isNumber(id) ? id : getPositionById(id), pos = Ox.isNumber(id) ? id : getPositionById(id),
$item = self.$items[pos], $item = self.$items[pos],
data = $item ? $item.options('data') : {}; data = $item ? $item.options('data') : {};
if (arguments.length == 1) { if (arguments.length == 1) {
return data; return data;
} else if (arguments.length == 2) { } else if (arguments.length == 2 && Ox.isString(arguments[1])) {
return data[key]; return data[arguments[1]];
} else if ($item) { } else if ($item) {
Ox.forEach(Ox.makeObject(args), function(value, key) {
if (key == self.options.unique) { if (key == self.options.unique) {
// unique id has changed // unique id has changed
self.options.selected = self.options.selected.map(function(id_) { self.options.selected = self.options.selected.map(function(id_) {
@ -1822,6 +1824,7 @@ Ox.List = function(options, self) {
self.options.items[pos][key] = value; self.options.items[pos][key] = value;
} }
data[key] = value; data[key] = value;
});
$item.options({data: data}); $item.options({data: data});
return that; return that;
} }