From 6fc98deef03b91b0ea2ed51be2708bdd2c61d479 Mon Sep 17 00:00:00 2001 From: Scott González Date: Thu, 24 Mar 2011 09:21:53 -0400 Subject: Widget: Allow setting individual properties of deep options. Fixes #7035 - Widget: Extend .option() to set partial nested options. --- ui/jquery.ui.widget.js | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'ui') diff --git a/ui/jquery.ui.widget.js b/ui/jquery.ui.widget.js index 09c680ec3..27d08ccd2 100644 --- a/ui/jquery.ui.widget.js +++ b/ui/jquery.ui.widget.js @@ -208,19 +208,34 @@ $.Widget.prototype = { }, option: function( key, value ) { - var options = key; + var options = key, + parts, + curOption, + i; if ( arguments.length === 0 ) { // don't return a reference to the internal hash return $.extend( {}, this.options ); } - if (typeof key === "string" ) { + if ( typeof key === "string" ) { if ( value === undefined ) { return this.options[ key ]; } + // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } options = {}; - options[ key ] = value; + parts = key.split( "." ); + key = parts.shift(); + if ( parts.length ) { + curOption = options[ key ] = $.extend( true, {}, this.options[ key ] ); + for ( i = 0; i < parts.length - 1; i++ ) { + curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; + curOption = curOption[ parts[ i ] ]; + } + curOption[ parts.pop() ] = value; + } else { + options[ key ] = value; + } } this._setOptions( options ); -- cgit v1.2.3