Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F881844
LazyLoadJSIStore.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Subscribers
None
LazyLoadJSIStore.js
View Options
if
(
!
dojo
.
_hasResource
[
"dojox.data.demos.stores.LazyLoadJSIStore"
]){
//_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo
.
_hasResource
[
"dojox.data.demos.stores.LazyLoadJSIStore"
]
=
true
;
dojo
.
provide
(
"dojox.data.demos.stores.LazyLoadJSIStore"
);
dojo
.
require
(
"dojo.data.ItemFileReadStore"
);
dojo
.
declare
(
"dojox.data.demos.stores.LazyLoadJSIStore"
,
dojo
.
data
.
ItemFileReadStore
,
{
constructor
:
function
(
/* object */
keywordParameters
){
// LazyLoadJSIStore extends ItemFileReadStore to implement an
// example of lazy-loading/faulting in items on-demand.
// Note this is certianly not a perfect implementation, it is
// an example.
},
isItemLoaded
:
function
(
/*object*/
item
)
{
// summary:
// Overload of the isItemLoaded function to look for items of type 'stub', which indicate
// the data hasn't been loaded in yet.
//
// item:
// The item to examine.
//For this store, if it has the value of stub for its type attribute,
//then the item basn't been fully loaded yet. It's just a placeholder.
if
(
this
.
getValue
(
item
,
"type"
)
===
"stub"
){
return
false
;
}
return
true
;
},
loadItem
:
function
(
keywordArgs
){
// summary:
// Overload of the loadItem function to fault in items. This assumes the data for an item is laid out
// in a RESTful sort of pattern name0/name1/data.json and so on and uses that to load the data.
// It will also detect stub items in the newly loaded item and insert the stubs into the ItemFileReadStore
// list so they can also be loaded in on-demand.
//
// item:
// The item to examine.
var
item
=
keywordArgs
.
item
;
this
.
_assertIsItem
(
item
);
//Build the path to the data.json for this item
//The path consists of where its parent was loaded from
//plus the item name.
var
itemName
=
this
.
getValue
(
item
,
"name"
);
var
parent
=
this
.
getValue
(
item
,
"parent"
);
var
dataUrl
=
""
;
if
(
parent
){
dataUrl
+=
(
parent
+
"/"
);
}
//For this store, all child input data is loaded from a url that ends with data.json
dataUrl
+=
itemName
+
"/data.json"
;
//Need a reference to the store to call back to its structures.
var
self
=
this
;
// Callback for handling a successful load.
var
gotData
=
function
(
data
){
//Now we need to modify the existing item a bit to take it out of stub state
//Since we extend the store and have knowledge of the internal
//structure, this can be done here. Now, is we extended
//a write store, we could call the write APIs to do this too
//But for a simple demo the diretc modification in the store function
//is sufficient.
//Clear off the stub indicators.
delete
item
.
type
;
delete
item
.
parent
;
//Set up the loaded values in the format ItemFileReadStore uses for attributes.
for
(
i
in
data
)
{
if
(
dojo
.
isArray
(
data
[
i
]))
{
item
[
i
]
=
data
[
i
];
}
else
{
item
[
i
]
=
[
data
[
i
]];
}
}
//Reset the item in the reference.
self
.
_arrayOfAllItems
[
item
[
self
.
_itemNumPropName
]]
=
item
;
//Scan the new values in the item for extra stub items we need to
//add to the items array of the store so they can be lazy-loaded later...
var
attributes
=
self
.
getAttributes
(
item
);
for
(
i
in
attributes
){
var
values
=
self
.
getValues
(
item
,
attributes
[
i
]);
for
(
var
j
=
0
;
j
<
values
.
length
;
j
++
)
{
var
value
=
values
[
j
];
if
(
typeof
value
===
"object"
){
if
(
value
[
"stub"
]
){
//We have a stub reference here, we need to create the stub item
var
stub
=
{
type
:
[
"stub"
],
name
:
[
value
[
"stub"
]],
//
parent
:
[
itemName
]
//The child stub item is parented by this item name...
};
if
(
parent
)
{
//Add in any parents to your parent so URL construstruction is accurate.
stub
.
parent
[
0
]
=
parent
+
"/"
+
stub
.
parent
[
0
];
}
//Finalize the addition of the new stub item into the ItemFileReadStore list.
self
.
_arrayOfAllItems
.
push
(
stub
);
stub
[
self
.
_storeRefPropName
]
=
self
;
stub
[
self
.
_itemNumPropName
]
=
(
self
.
_arrayOfAllItems
.
length
-
1
);
//Last one pushed in should be the item
values
[
j
]
=
stub
;
//Set the stub item back in its place and replace the stub notation.
}
}
}
}
//Done processing! Call the onItem, if any.
if
(
keywordArgs
.
onItem
){
var
scope
=
keywordArgs
.
scope
?
keywordArgs
.
scope
:
dojo
.
global
;
keywordArgs
.
onItem
.
call
(
scope
,
item
);
}
};
//Callback for any errors that occur during load.
var
gotError
=
function
(
error
){
//Call the onComplete, if any
if
(
keywordArgs
.
onError
){
var
scope
=
keywordArgs
.
scope
?
keywordArgs
.
scope
:
dojo
.
global
;
keywordArgs
.
onError
.
call
(
scope
,
error
);
}
};
//Fire the get and pass the proper callbacks to the deferred.
var
xhrArgs
=
{
url
:
dataUrl
,
handleAs
:
"json-comment-optional"
};
var
d
=
dojo
.
xhrGet
(
xhrArgs
);
d
.
addCallback
(
gotData
);
d
.
addErrback
(
gotError
);
}
});
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Apr 2, 13:34 (4 w, 17 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24926
Default Alt Text
LazyLoadJSIStore.js (4 KB)
Attached To
rZEDHG ZedLegacy
Event Timeline
Log In to Comment