datasource-offlinecache.mustache revision 819e90d415ed17d59af3a247b2ad9d6feb0c21b5
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<style scoped>
297be3708069ef31814d6d75c0d71a50a78feb03Mark Andrews#demo .output {
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews margin-bottom:1em;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein padding:10px;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein border:1px solid #D9D9D9;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#demo .output pre {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein font-size: 11px;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#demo .output strong {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein padding: .25em .4em;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein background: #333;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein color: #fff;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein text-shadow: -1px -1px 1px #000;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein border-radius: 5px;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
9ef82979c49da3dd3647273b1cd6ed7d3352c003Automatic Updater</style>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="intro">
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <p>The DataSourceCache plugin enables caching on any DataSource to reduce high-latency calls to remote sources and to reduce server load. The plugin can point to `Y.OfflineCache` to allow cached data to persist across browser sessions in browsers that support <a href="http://dev.w3.org/html5/webstorage/" title="Web Storage">HTML5 localStorage</a>.</p>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews</div>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="example yui3-skin-sam">
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {{>datasource-offlinecache-source}}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein</div>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<p>Use the `plug()` method to initialize the DataSourceCache plugin
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinand point the configuration value `cache` to Y.CacheOffline to enable
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinoffline caching. The configuration value `expires` can be set to
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinchange how soon the data expires.</p>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein```
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinYUI().use("datasource", "dataschema", "cache", function(Y) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var callback = {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein success: function (e) { /* output to screen */ },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein failure: function (e) { /* output to screen */ }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein myDataSource = new Y.DataSource.Get({
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein source: "https://api.github.com/users/",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater // this is only needed because the query appends the url
297be3708069ef31814d6d75c0d71a50a78feb03Mark Andrews // rather than the url's query params
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews generateRequestCallback: function (guid) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein return '/repos?callback=YUI.Env.DataSource.callbacks.' + guid;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }),
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein myDataSource.plug(Y.Plugin.DataSourceJSONSchema, {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein schema: {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein resultListLocator: "data",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein resultFields: ["name"]
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater }
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater });
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater // Enable offline data caching by pointing to Y.CacheOffline.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // For demonstration purposes, data is set to expire after 10 seconds
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater myDataSource.plug(Y.Plugin.DataSourceCache, {
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater cache: Y.CacheOffline,
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater expires: 10000,
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater max: 5
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater });
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // Retrieves from server. Adds to cache
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein myDataSource.sendRequest({
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews request : "lsmith",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein callback: callback
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater });
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater // Retrieves from server. Adds to cache
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater myDataSource.sendRequest({
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater request : "davglass",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein callback: callback
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // Retrieves from cache if requested within 5 seconds
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein myDataSource.sendRequest({
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater request : "lsmith",
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater callback: callback
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater // ... wait 10 seconds ...
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater // Cached data has expired. Retrieves from server. Adds to cache.
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater myDataSource.sendRequest({
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein request : "davglass",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein callback: callback
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein});
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein```
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<h3 id="fullsource">Full Example Source Listing</h3>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater```
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater {{>datasource-offlinecache-source}}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein```
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein