mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Refactor: Data.prototype.access. Thanks to @RubyLouvre and @gibson042. Closes #1167
This commit is contained in:
parent
b734666f4d
commit
93043d002a
41
src/data.js
41
src/data.js
@ -108,24 +108,33 @@ Data.prototype = {
|
||||
cache : cache[ key ];
|
||||
},
|
||||
access: function( owner, key, value ) {
|
||||
if ( value === undefined && (key && typeof key !== "object") ) {
|
||||
// Assume this is a request to read the cached data
|
||||
// In cases where either:
|
||||
//
|
||||
// 1. No key was specified
|
||||
// 2. A string key was specified, but no value provided
|
||||
//
|
||||
// Take the "read" path and allow the get method to determine
|
||||
// which value to return, respectively either:
|
||||
//
|
||||
// 1. The entire cache object
|
||||
// 2. The data stored at the key
|
||||
//
|
||||
if ( key === undefined ||
|
||||
((key && typeof key === "string") && value === undefined) ) {
|
||||
return this.get( owner, key );
|
||||
} else {
|
||||
|
||||
// If only an owner was specified, return the entire
|
||||
// cache object.
|
||||
if ( key === undefined ) {
|
||||
return this.get( owner );
|
||||
}
|
||||
|
||||
// Allow setting or extending (existing objects) with an
|
||||
// object of properties, or a key and val
|
||||
this.set( owner, key, value );
|
||||
return value !== undefined ? value : key;
|
||||
}
|
||||
// Otherwise, this is a read request.
|
||||
return this.get( owner, key );
|
||||
|
||||
// [*]When the key is not a string, or both a key and value
|
||||
// are specified, set or extend (existing objects) with either:
|
||||
//
|
||||
// 1. An object of properties
|
||||
// 2. A key and value
|
||||
//
|
||||
this.set( owner, key, value );
|
||||
|
||||
// Since the "set" path can have two possible entry points
|
||||
// return the expected data based on which path was taken[*]
|
||||
return value !== undefined ? value : key;
|
||||
},
|
||||
remove: function( owner, key ) {
|
||||
var i, l, name,
|
||||
|
@ -7,29 +7,47 @@ test("expando", function(){
|
||||
});
|
||||
|
||||
test( "jQuery.data & removeData, expected returns", function() {
|
||||
expect(2);
|
||||
expect(4);
|
||||
var elem = document.body;
|
||||
|
||||
equal(
|
||||
jQuery.data( document.body, "hello", "world" ), "world",
|
||||
jQuery.data( elem, "hello", "world" ), "world",
|
||||
"jQuery.data( elem, key, value ) returns value"
|
||||
);
|
||||
equal(
|
||||
jQuery.removeData( document.body, "hello" ), undefined,
|
||||
jQuery.data( elem, "hello" ), "world",
|
||||
"jQuery.data( elem, key ) returns value"
|
||||
);
|
||||
deepEqual(
|
||||
jQuery.data( elem, { goodnight: "moon" }), { goodnight: "moon" },
|
||||
"jQuery.data( elem, key, obj ) returns obj"
|
||||
);
|
||||
equal(
|
||||
jQuery.removeData( elem, "hello" ), undefined,
|
||||
"jQuery.removeData( elem, key, value ) returns undefined"
|
||||
);
|
||||
|
||||
});
|
||||
|
||||
test( "jQuery._data & _removeData, expected returns", function() {
|
||||
expect(2);
|
||||
expect(4);
|
||||
var elem = document.body;
|
||||
|
||||
equal(
|
||||
jQuery._data( document.body, "hello", "world" ), "world",
|
||||
"jQuery.data( elem, key, value ) returns value"
|
||||
jQuery._data( elem, "hello", "world" ), "world",
|
||||
"jQuery._data( elem, key, value ) returns value"
|
||||
);
|
||||
equal(
|
||||
jQuery._removeData( document.body, "hello" ), undefined,
|
||||
"jQuery.removeData( elem, key, value ) returns undefined"
|
||||
jQuery._data( elem, "hello" ), "world",
|
||||
"jQuery._data( elem, key ) returns value"
|
||||
);
|
||||
deepEqual(
|
||||
jQuery._data( elem, { goodnight: "moon" }), { goodnight: "moon" },
|
||||
"jQuery._data( elem, obj ) returns obj"
|
||||
);
|
||||
equal(
|
||||
jQuery._removeData( elem, "hello" ), undefined,
|
||||
"jQuery._removeData( elem, key, value ) returns undefined"
|
||||
);
|
||||
});
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user