From d599f75e85bd64980ec5b4ae41d21f0e73b1675d Mon Sep 17 00:00:00 2001 From: Rufus Pollock Date: Mon, 9 Jul 2012 01:28:01 +0100 Subject: [PATCH] [model,refator][s]: reintroduce summary on Record object deprecating recordSummary on Dataset. * Reverses change in 1dadc1106bd2dbcad4580d3889e15ac44c865f80 * Record now has fields attribute passed down from Dataset. This is needed in order to support summary method and also makes sense -- as pointed out by @zephod * Update examples --- _includes/tutorial-basics-ex-1.js | 35 +++++++++++--------- _includes/tutorial-basics-ex-fields-2.js | 2 +- src/model.js | 41 ++++++++++++++++-------- src/view.timeline.js | 2 +- test/model.test.js | 16 +++++++++ 5 files changed, 66 insertions(+), 30 deletions(-) diff --git a/_includes/tutorial-basics-ex-1.js b/_includes/tutorial-basics-ex-1.js index f6d7be64..2ca52f8f 100644 --- a/_includes/tutorial-basics-ex-1.js +++ b/_includes/tutorial-basics-ex-1.js @@ -2,23 +2,28 @@ // must have div with class="ex-1" var $el = $('.ex-1'); -// we will define this function display so we can reuse it below! -function display(dataset) { - // total number of records resulting from latest query - $el.append('Total found: ' + dataset.recordCount + '
'); - $el.append('Total returned: ' + dataset.records.length); +// total number of records resulting from latest query +$el.append('Total found: ' + dataset.recordCount + '
'); +$el.append('Total returned: ' + dataset.records.length); - $el.append('
'); +$el.append('
'); - // dataset.records is a Backbone Collection of Records that resulted from latest query (hence "current") - // Get the first record in the list - it returns an instance of the Record object - var record = dataset.records.at(0); +// get 2nd record in list (note collection indexes off 0!) +// this is an instance of a Record object +var record = dataset.records.at(1); - // Use the summary helper method which produces proper html - // You could also do record.toJSON() to get a hash of the record data - $el.append(dataset.recordSummary(record)); -} +// if records have an id you can get by id too ... +// var record = dataset.records.get(record-id); -// now display our existing dataset ... -display(dataset); +// To get record attribute we use 'get' +var recdate = record.get('date'); + +$el.append('Date is: ' + recdate); +$el.append('
'); + +// We can also convert the Record back to simple JS object +var simple = record.toJSON(); + +$el.append('

Record as simple object

'); +$el.append('
' + JSON.stringify(simple, null, 2) + '
'); diff --git a/_includes/tutorial-basics-ex-fields-2.js b/_includes/tutorial-basics-ex-fields-2.js index f7d78f8f..ed4127c5 100644 --- a/_includes/tutorial-basics-ex-fields-2.js +++ b/_includes/tutorial-basics-ex-fields-2.js @@ -6,5 +6,5 @@ dataset.fields.models[6] = new recline.Model.Field({ type: 'geo_point' }); var rec = dataset.records.at(0); -$el.append(dataset.recordSummary(rec)); +$el.append(record.summary()); diff --git a/src/model.js b/src/model.js index 830bdebf..7d9be16f 100644 --- a/src/model.js +++ b/src/model.js @@ -202,6 +202,7 @@ my.Dataset = Backbone.Model.extend({ self.recordCount = queryResult.total; var docs = _.map(queryResult.hits, function(hit) { var _doc = new my.Record(hit); + _doc.fields = self.fields; _doc.bind('change', function(doc) { self._changes.updates.push(doc.toJSON()); }); @@ -254,18 +255,9 @@ my.Dataset = Backbone.Model.extend({ return dfd.promise(); }, - // ### recordSummary - // - // Get a simple html summary of a Dataset record in form of key/value list + // Deprecated (as of v0.5) - use record.summary() recordSummary: function(record) { - var html = '
'; - this.fields.each(function(field) { - if (field.id != 'id') { - html += '
' + field.get('label') + ': ' + record.getFieldValue(field) + '
'; - } - }); - html += '
'; - return html; + return record.summary(); }, // ### _backendFromString(backendString) @@ -329,14 +321,22 @@ my.Dataset.restore = function(state) { return dataset; }; -// ## A Record (aka Row) +// ## A Record // -// A single entry or row in the dataset +// A single record (or row) in the dataset my.Record = Backbone.Model.extend({ constructor: function Record() { Backbone.Model.prototype.constructor.apply(this, arguments); }, + // ### initialize + // + // Create a Record + // + // You usually will not do this directly but will have records created by + // Dataset e.g. in query method + // + // Certain methods require presence of a fields attribute (identical to that on Dataset) initialize: function() { _.bindAll(this, 'getFieldValue'); }, @@ -365,6 +365,21 @@ my.Record = Backbone.Model.extend({ return val; }, + // ### summary + // + // Get a simple html summary of this record in form of key/value list + summary: function(record) { + var self = this; + var html = '
'; + this.fields.each(function(field) { + if (field.id != 'id') { + html += '
' + field.get('label') + ': ' + self.getFieldValue(field) + '
'; + } + }); + html += '
'; + return html; + }, + // Override Backbone save, fetch and destroy so they do nothing // Instead, Dataset object that created this Record should take care of // handling these changes (discovery will occur via event notifications) diff --git a/src/view.timeline.js b/src/view.timeline.js index 26d9d5a9..00f2f2d9 100644 --- a/src/view.timeline.js +++ b/src/view.timeline.js @@ -102,7 +102,7 @@ my.Timeline = Backbone.View.extend({ "startDate": start, "endDate": end, "headline": String(record.get('title') || ''), - "text": record.get('description') || this.model.recordSummary(record) + "text": record.get('description') || record.summary() }; return tlEntry; } else { diff --git a/test/model.test.js b/test/model.test.js index 0740c1b4..46aa6195 100644 --- a/test/model.test.js +++ b/test/model.test.js @@ -247,6 +247,22 @@ test('_normalizeRecordsAndFields', function () { }); }); + +// ================================= +// Record + +module("Model Record"); + +test('summary', function () { + var dataset = new recline.Model.Dataset({ + records: [ {a: 1, b: 2} ] + }); + var record = dataset.records.at(0); + var out = record.summary(); + var exp = '
a: 1
b: 2
' + equal(out, exp); +}); + // ================================= // Query