Mercurial > browser-couch
diff tutorial.html @ 70:36e47760ee5b
Added a work-in-progress tutorial that auto-generates parts of itself.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Mon, 20 Apr 2009 13:13:33 -0700 |
parents | |
children | 8f0b18026782 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tutorial.html Mon Apr 20 13:13:33 2009 -0700 @@ -0,0 +1,77 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> + <link rel="stylesheet" type="text/css" media="all" + href="css/tutorial.css" /> + <title>Blog Example</title> +</head> +<body> +<div id="content" class="documentation"> +<h1>Using BrowserCouch</h1> + +<p>Suppose we want to add offline support for a blog. To get a +database called <tt>blog-posts</tt> in BrowserCouch, you can use the +following function:</p> + +<div class="example-code"> +BrowserCouch.get('blog-posts', onRetrieveDb, new FakeStorage()); +</div> + +<p>It's clear that the first parameter is the name of the database we +want; the second parameter is the callback that will be passed the +database once it's fetched. The third parameter is optional, and +specifies the engine that will be used to persistently store our +database. In this case we're using a storage backend +called <tt>FakeStorage</tt>, which just stores everything +non-persistently in memory, because this is just a tutorial. We could +just as easily leave out the third parameter to have BrowserCouch +figure out the best storage backend based on our browser's +capabilities.</p> + +<p>If the database doesn't already exist, an empty one will be created +for us. Putting blog posts into the database can be done via +an <tt>onRetrieveDb()</tt> function like this:</p> + +<div class="example-code"> +function onRetrieveDb(db) { + gBlogPosts = db; + gBlogPosts.put( + [{id: 0, author: 'Myk', title: 'Burritos', content: 'Burritos are yum.'}, + {id: 1, author: 'Thunder', title: 'Bacon', content: 'I like bacon.'}], + onCommitted + ); +}; +</div> + +<p>Every item we put into our database needs to have an <tt>id</tt> +attribute, but aside from that, the item can contain any +JSON-encodable data.</p> + +<p>Now it's possible to make a view that organizes all the posts by +author:</p> + +<div class="example-code"> +function onCommitted() { + gBlogPosts.view({ + map: function(doc, emit) { + emit(doc.author, doc); + }, + finished: function(result) { + displayInElement(result, 'author-keyed-view'); + } + }); +} +</div> + +<p>The output placed in the <tt>author-keyed-view</tt> element is:</p> + +<div class="example-output" id="author-keyed-view"> +</div> + +<script src="js/ext/jquery.js"></script> +<script src="js/browser-couch.js"></script> +<script src="js/tutorial.js"></script> +</body> +</html>