mirror of
https://github.com/jquery/jquery-ui.git
synced 2024-10-05 01:44:18 +00:00
Widget: Added ability to get deep options. Fixes #7459 - Widget: Extend .option() to get partial nested options.
This commit is contained in:
parent
7cd3d0a99e
commit
3dea8f1786
@ -413,6 +413,7 @@ test( ".option() - getter", function() {
|
||||
qux: [ "quux", "quuux" ]
|
||||
});
|
||||
|
||||
same( div.testWidget( "option", "x" ), null, "non-existent option" );
|
||||
same( div.testWidget( "option", "foo"), "bar", "single option - string" );
|
||||
same( div.testWidget( "option", "baz"), 5, "single option - number" );
|
||||
same( div.testWidget( "option", "qux"), [ "quux", "quuux" ],
|
||||
@ -431,6 +432,24 @@ test( ".option() - getter", function() {
|
||||
"modifying returned options hash does not modify plugin instance" );
|
||||
});
|
||||
|
||||
test( ".option() - deep option getter", function() {
|
||||
$.widget( "ui.testWidget", {} );
|
||||
var div = $( "<div>" ).testWidget({
|
||||
foo: {
|
||||
bar: "baz",
|
||||
qux: {
|
||||
quux: "xyzzy"
|
||||
}
|
||||
}
|
||||
});
|
||||
equal( div.testWidget( "option", "foo.bar" ), "baz", "one level deep - string" );
|
||||
deepEqual( div.testWidget( "option", "foo.qux" ), { quux: "xyzzy" },
|
||||
"one level deep - object" );
|
||||
equal( div.testWidget( "option", "foo.qux.quux" ), "xyzzy", "two levels deep - string" );
|
||||
equal( div.testWidget( "option", "x.y" ), null, "top level non-existent" );
|
||||
equal( div.testWidget( "option", "foo.x.y" ), null, "one level deep - non-existent" );
|
||||
});
|
||||
|
||||
test( ".option() - delegate to ._setOptions()", function() {
|
||||
var calls = [];
|
||||
$.widget( "ui.testWidget", {
|
||||
|
14
ui/jquery.ui.widget.js
vendored
14
ui/jquery.ui.widget.js
vendored
@ -133,7 +133,7 @@ $.widget.bridge = function( name, object ) {
|
||||
}
|
||||
var methodValue = instance[ options ].apply( instance, args );
|
||||
if ( methodValue !== instance && methodValue !== undefined ) {
|
||||
returnValue = methodValue.jquery ?
|
||||
returnValue = methodValue && methodValue.jquery ?
|
||||
returnValue.pushStack( methodValue.get() ) :
|
||||
methodValue;
|
||||
return false;
|
||||
@ -239,9 +239,6 @@ $.Widget.prototype = {
|
||||
}
|
||||
|
||||
if ( typeof key === "string" ) {
|
||||
if ( value === undefined ) {
|
||||
return this.options[ key ];
|
||||
}
|
||||
// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
|
||||
options = {};
|
||||
parts = key.split( "." );
|
||||
@ -252,8 +249,15 @@ $.Widget.prototype = {
|
||||
curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
|
||||
curOption = curOption[ parts[ i ] ];
|
||||
}
|
||||
curOption[ parts.pop() ] = value;
|
||||
key = parts.pop();
|
||||
if ( value === undefined ) {
|
||||
return curOption[ key ] === undefined ? null : curOption[ key ];
|
||||
}
|
||||
curOption[ key ] = value;
|
||||
} else {
|
||||
if ( value === undefined ) {
|
||||
return this.options[ key ] === undefined ? null : this.options[ key ];
|
||||
}
|
||||
options[ key ] = value;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user