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 ];
|
cache : cache[ key ];
|
||||||
},
|
},
|
||||||
access: function( owner, key, value ) {
|
access: function( owner, key, value ) {
|
||||||
if ( value === undefined && (key && typeof key !== "object") ) {
|
// In cases where either:
|
||||||
// Assume this is a request to read the cached data
|
//
|
||||||
|
// 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 );
|
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 ) {
|
remove: function( owner, key ) {
|
||||||
var i, l, name,
|
var i, l, name,
|
||||||
|
@ -7,29 +7,47 @@ test("expando", function(){
|
|||||||
});
|
});
|
||||||
|
|
||||||
test( "jQuery.data & removeData, expected returns", function() {
|
test( "jQuery.data & removeData, expected returns", function() {
|
||||||
expect(2);
|
expect(4);
|
||||||
|
var elem = document.body;
|
||||||
|
|
||||||
equal(
|
equal(
|
||||||
jQuery.data( document.body, "hello", "world" ), "world",
|
jQuery.data( elem, "hello", "world" ), "world",
|
||||||
"jQuery.data( elem, key, value ) returns value"
|
"jQuery.data( elem, key, value ) returns value"
|
||||||
);
|
);
|
||||||
equal(
|
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"
|
"jQuery.removeData( elem, key, value ) returns undefined"
|
||||||
);
|
);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test( "jQuery._data & _removeData, expected returns", function() {
|
test( "jQuery._data & _removeData, expected returns", function() {
|
||||||
expect(2);
|
expect(4);
|
||||||
|
var elem = document.body;
|
||||||
|
|
||||||
equal(
|
equal(
|
||||||
jQuery._data( document.body, "hello", "world" ), "world",
|
jQuery._data( elem, "hello", "world" ), "world",
|
||||||
"jQuery.data( elem, key, value ) returns value"
|
"jQuery._data( elem, key, value ) returns value"
|
||||||
);
|
);
|
||||||
equal(
|
equal(
|
||||||
jQuery._removeData( document.body, "hello" ), undefined,
|
jQuery._data( elem, "hello" ), "world",
|
||||||
"jQuery.removeData( elem, key, value ) returns undefined"
|
"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