diff --git a/README.md b/README.md index 3a7eb43..1df2359 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# jQuery Data Link plugin plugin v1.0.0pre. +# jQuery Data Link plugin v1.0.0pre. _Note: This plugin is currently in beta form and may change significantly before version 1.0 is released. See tagged versions for stable Beta releases. Requires jquery version 1.4.2._ diff --git a/jquery.datalink.js b/jquery.datalink.js index b6e2acc..3512ad0 100644 --- a/jquery.datalink.js +++ b/jquery.datalink.js @@ -79,7 +79,18 @@ $.extend({ $this.triggerHandler( eventNameSetField + parts[1] + "!", args ); if ( value !== undefined ) { - target[ field ] = value; + var props = field.split(/[\[]/g), + target_path = target, + last_prop = props.pop().replace(']', ''), + current_prop; + + for (var i = 0, props_len = props.length; i < props_len; i++) { + current_prop = props[i].replace(']', ''); + if (!target_path[current_prop]) target_path[current_prop] = {}; + target_path = target_path[current_prop]; + } + target_path[last_prop] = value; +// target[ field ] = value; } $this.triggerHandler( eventNameChangeField + parts[1] + "!", args ); } @@ -100,7 +111,7 @@ function getMapping(ev, changed, newvalue, map) { } else { name = (target.name || target.id); } - + if ( !map ) { mappedName = name; } else { @@ -128,7 +139,7 @@ $.extend($.fn, { return self; } function matchByName(name) { - var selector = "[name=" + name + "], [id=" + name +"]"; + var selector = "[name='" + name + "'], [id='" + name +"']"; // include elements in this set that match as well a child matches return self.filter(selector).add(self.find(selector)); } @@ -173,7 +184,7 @@ $.extend($.fn, { } }); } - + }; if ( mapping ) { $.each(mapping, function(n, v) { @@ -226,7 +237,7 @@ $.extend($.fn, { this.each(function() { var self = $(this), links = getLinks( this ).s; - for (var i = links.length-1; i >= 0; i--) { + for (var i = links.length-1; i >= 0; i--) { var link = links[ i ]; if ( link.target === target ) { // unbind the handlers