/docs/base-collection.html
HTML | 382 lines | 268 code | 114 blank | 0 comment | 0 complexity | 3fcb67328cc3ad046aaa7fe4192ea172 MD5 | raw file
- <!DOCTYPE html>
- <html>
- <head>
- <title>base-collection.js</title>
- <meta http-equiv="content-type" content="text/html; charset=UTF-8">
- <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
- <link rel="stylesheet" media="all" href="docco.css" />
- </head>
- <body>
- <div id="container">
- <div id="background"></div>
-
- <ul id="jump_to">
- <li>
- <a class="large" href="javascript:void(0);">Jump To …</a>
- <a class="small" href="javascript:void(0);">+</a>
- <div id="jump_wrapper">
- <div id="jump_page">
-
-
- <a class="source" href="base-collection.html">
- base-collection.js
- </a>
-
-
- <a class="source" href="filter-collection.html">
- filter-collection.js
- </a>
-
-
- <a class="source" href="live-collection.html">
- live-collection.js
- </a>
-
-
- <a class="source" href="base-controller.html">
- base-controller.js
- </a>
-
-
- <a class="source" href="data-bindings.html">
- data-bindings.js
- </a>
-
-
- <a class="source" href="base-model.html">
- base-model.js
- </a>
-
-
- <a class="source" href="base-module.html">
- base-module.js
- </a>
-
-
- <a class="source" href="base-router.html">
- base-router.js
- </a>
-
-
- <a class="source" href="base-view.html">
- base-view.js
- </a>
-
-
- <a class="source" href="collection-view.html">
- collection-view.js
- </a>
-
-
- <a class="source" href="model-view.html">
- model-view.js
- </a>
-
- </div>
- </li>
- </ul>
-
- <ul class="sections">
-
- <li id="title">
- <div class="annotation">
- <h1>base-collection.js</h1>
- </div>
- </li>
-
-
-
- <li id="section-1">
- <div class="annotation">
-
- <div class="pilwrap ">
- <a class="pilcrow" href="#section-1">¶</a>
- </div>
-
- </div>
-
- <div class="content"><div class='highlight'><pre>module.exports = <span class="keyword">function</span>(options) {</pre></div></div>
-
- </li>
-
-
- <li id="section-2">
- <div class="annotation">
-
- <div class="pilwrap for-h2">
- <a class="pilcrow" href="#section-2">¶</a>
- </div>
- <h2>BaseCollection</h2>
- <hr>
- </div>
-
- </li>
-
-
- <li id="section-3">
- <div class="annotation">
-
- <div class="pilwrap ">
- <a class="pilcrow" href="#section-3">¶</a>
- </div>
- <p>The BaseCollection is the base Collection for storing instances of models
- for Bottlecap. It is the same as a normal Backbone.Collection, but with
- a few alterations:</p>
- <ul>
- <li>It keeps a reference to the event bus upon construction</li>
- <li>It can reply to DataStore API requests on that event bus, if a
- namespace option is passed to it.</li>
- </ul>
- <h3>Dependencies</h3>
- <hr>
- </div>
-
- </li>
-
-
- <li id="section-4">
- <div class="annotation">
-
- <div class="pilwrap ">
- <a class="pilcrow" href="#section-4">¶</a>
- </div>
-
- </div>
-
- <div class="content"><div class='highlight'><pre> <span class="keyword">var</span> Backbone = options.Backbone;
- <span class="keyword">var</span> _ = options._;
- <span class="keyword">var</span> FilterCollection = options.FilterCollection;</pre></div></div>
-
- </li>
-
-
- <li id="section-5">
- <div class="annotation">
-
- <div class="pilwrap for-h3">
- <a class="pilcrow" href="#section-5">¶</a>
- </div>
- <h3>BaseCollection</h3>
- <hr>
- </div>
-
- </li>
-
-
- <li id="section-6">
- <div class="annotation">
-
- <div class="pilwrap ">
- <a class="pilcrow" href="#section-6">¶</a>
- </div>
-
- </div>
-
- <div class="content"><div class='highlight'><pre> <span class="keyword">var</span> BaseCollection = Backbone.Collection.extend({</pre></div></div>
-
- </li>
-
-
- <li id="section-7">
- <div class="annotation">
-
- <div class="pilwrap ">
- <a class="pilcrow" href="#section-7">¶</a>
- </div>
- <p>The DataStore API events</p>
- </div>
-
- <div class="content"><div class='highlight'><pre> dataStoreAPI: [
- <span class="string">'all'</span>, <span class="string">'find'</span>, <span class="string">'where'</span>, <span class="string">'filter'</span>, <span class="string">'build'</span>
- ],</pre></div></div>
-
- </li>
-
-
- <li id="section-8">
- <div class="annotation">
-
- <div class="pilwrap ">
- <a class="pilcrow" href="#section-8">¶</a>
- </div>
- <p>Creates a BaseCollection and returns it. Accepts <code>models</code>, and
- <code>options</code> parameters. The <code>options</code> parameter should contain an
- instance of the application event bus. If you want this BaseCollection
- to be able to respond to DataStore API requests on the event bus, you
- should also pass a <code>namespace</code> property on the <code>options</code> object.</p>
- </div>
-
- <div class="content"><div class='highlight'><pre> constructor: <span class="keyword">function</span>(models, options) {
- Backbone.Collection.apply(<span class="keyword">this</span>, arguments);
- models = models || [];
- options = options || {};
- <span class="keyword">this</span>._vent = options.vent;
- <span class="keyword">if</span> (!<span class="keyword">this</span>.namespace) {
- <span class="keyword">this</span>.namespace = options.namespace;
- }
- <span class="keyword">if</span> (<span class="keyword">this</span>.namespace) {
- <span class="keyword">var</span> locals = _.map(<span class="keyword">this</span>.dataStoreAPI, <span class="keyword">function</span>(name) {
- <span class="keyword">return</span> <span class="string">'_'</span> + name;
- });
- _.bindAll(<span class="keyword">this</span>, locals);
- <span class="keyword">this</span>._setupDSBindings(<span class="keyword">this</span>.namespace, <span class="keyword">this</span>.dataStoreAPI);
- }
- <span class="keyword">return</span> <span class="keyword">this</span>;
- },</pre></div></div>
-
- </li>
-
-
- <li id="section-9">
- <div class="annotation">
-
- <div class="pilwrap for-h3">
- <a class="pilcrow" href="#section-9">¶</a>
- </div>
- <h3>DataStore API functions</h3>
- </div>
-
- <div class="content"><div class='highlight'><pre> _subcollection: <span class="keyword">function</span>(options) {
- <span class="keyword">var</span> col = <span class="keyword">new</span> FilterCollection({
- filter: options.filter,
- parent: <span class="keyword">this</span>
- });
- <span class="keyword">return</span> col;
- },
- _build: <span class="keyword">function</span>(attrs, options, cb) {
- <span class="keyword">var</span> args = Array.prototype.slice.call(arguments);
- <span class="keyword">if</span> (args.length === <span class="number">1</span>) {
- cb = args[<span class="number">0</span>];
- attrs = {};
- options = {};
- } <span class="keyword">else</span> <span class="keyword">if</span> (args.length === <span class="number">2</span>) {
- attrs = args[<span class="number">0</span>];
- options = {};
- cb = args[<span class="number">1</span>];
- }
- <span class="keyword">var</span> model = <span class="keyword">new</span> <span class="keyword">this</span>.model(attrs, options);
- <span class="keyword">return</span> cb (<span class="literal">null</span>, model);
- },
- _all: <span class="keyword">function</span>(cb) {
- <span class="keyword">var</span> filter = <span class="keyword">function</span>(model) { <span class="keyword">return</span> <span class="literal">true</span>; };
- <span class="keyword">var</span> all = <span class="keyword">this</span>._subcollection({filter: filter});
- <span class="keyword">return</span> cb(<span class="literal">null</span>, all);
- },
- _find: <span class="keyword">function</span>(attrs, cb) {
- <span class="keyword">this</span>._where(attrs, <span class="keyword">function</span>(err, data) {
- <span class="keyword">if</span> (err) { <span class="keyword">return</span> cb(err); }
- <span class="keyword">if</span> (data.length < <span class="number">1</span>) {
- err = <span class="keyword">new</span> Error(<span class="string">'DSNotFoundError'</span>);
- <span class="keyword">return</span> cb(err);
- }
- <span class="keyword">var</span> model = data.at(<span class="number">0</span>);
- <span class="keyword">return</span> cb(<span class="literal">null</span>, model);
- });
- },
- _where: <span class="keyword">function</span>(attrs, cb) {
- <span class="keyword">var</span> filter = <span class="keyword">function</span>(model) {
- <span class="keyword">for</span> (<span class="keyword">var</span> key <span class="keyword">in</span> attrs) {
- <span class="keyword">var</span> modelValue = model.get(key);
- <span class="keyword">var</span> value = attrs[key];
- <span class="keyword">if</span> ((value <span class="keyword">instanceof</span> Array) && (modelValue <span class="keyword">instanceof</span> Array)) {
- <span class="keyword">if</span> (value !== modelValue) { <span class="keyword">return</span> <span class="literal">false</span>; }
- } <span class="keyword">else</span> <span class="keyword">if</span> (value <span class="keyword">instanceof</span> Array) {
- <span class="keyword">if</span> (!_.contains(value, modelValue)) { <span class="keyword">return</span> <span class="literal">false</span>; }
- } <span class="keyword">else</span> <span class="keyword">if</span> (modelValue <span class="keyword">instanceof</span> Array) {
- <span class="keyword">if</span> (!_.contains(modelValue, value)) { <span class="keyword">return</span> <span class="literal">false</span>; }
- } <span class="keyword">else</span> {
- <span class="keyword">if</span> (modelValue !== value) { <span class="keyword">return</span> <span class="literal">false</span>; }
- }
- }
- <span class="keyword">return</span> <span class="literal">true</span>;
- };
- <span class="keyword">var</span> col = <span class="keyword">this</span>._subcollection({filter: filter});
- <span class="keyword">return</span> cb(<span class="literal">null</span>, col);
- },
- _filter: <span class="keyword">function</span>(filter, cb) {
- <span class="keyword">var</span> col = <span class="keyword">this</span>._subcollection({filter: filter});
- <span class="keyword">return</span> cb(<span class="literal">null</span>, col);
- },</pre></div></div>
-
- </li>
-
-
- <li id="section-10">
- <div class="annotation">
-
- <div class="pilwrap ">
- <a class="pilcrow" href="#section-10">¶</a>
- </div>
- <p>Binds DataStore API message names to functions on this instance. For
- example, ds:contacts:all -> this._all</p>
- </div>
-
- <div class="content"><div class='highlight'><pre> _setupDSBindings: <span class="keyword">function</span>(namespace, dsEvents) {
- _.each(dsEvents, <span class="keyword">function</span>(name) {
- <span class="keyword">var</span> messageName = <span class="string">'ds:'</span> + namespace + <span class="string">':'</span> + name;
- <span class="keyword">var</span> ourFunc = <span class="keyword">this</span>[<span class="string">'_'</span> + name];
- <span class="keyword">this</span>._vent.handle(messageName, ourFunc);
- }, <span class="keyword">this</span>);
- }
- });</pre></div></div>
-
- </li>
-
-
- <li id="section-11">
- <div class="annotation">
-
- <div class="pilwrap for-h3">
- <a class="pilcrow" href="#section-11">¶</a>
- </div>
- <h3>Exports</h3>
- <hr>
- </div>
-
- </li>
-
-
- <li id="section-12">
- <div class="annotation">
-
- <div class="pilwrap ">
- <a class="pilcrow" href="#section-12">¶</a>
- </div>
-
- </div>
-
- <div class="content"><div class='highlight'><pre> <span class="keyword">return</span> BaseCollection;
- };</pre></div></div>
-
- </li>
-
- </ul>
- </div>
- </body>
- </html>