diff --git a/src/model.js b/src/model.js index 2f405762..b76986e4 100644 --- a/src/model.js +++ b/src/model.js @@ -309,9 +309,11 @@ my.Record = Backbone.Model.extend({ // // For the provided Field get the corresponding rendered computed data value // for this record. + // + // NB: if field is undefined a default '' value will be returned getFieldValue: function(field) { val = this.getFieldValueUnrendered(field); - if (field.renderer) { + if (field && !_.isUndefined(field.renderer)) { val = field.renderer(val, field, this.toJSON()); } return val; @@ -321,7 +323,12 @@ my.Record = Backbone.Model.extend({ // // For the provided Field get the corresponding computed data value // for this record. + // + // NB: if field is undefined a default '' value will be returned getFieldValueUnrendered: function(field) { + if (!field) { + return ''; + } var val = this.get(field.id); if (field.deriver) { val = field.deriver(val, field, this); diff --git a/test/model.test.js b/test/model.test.js index 0d227908..e4ba3617 100644 --- a/test/model.test.js +++ b/test/model.test.js @@ -60,6 +60,20 @@ test('Field: type mapping', function () { }); }); +test('Field: getFieldValue', function () { + var doc = new recline.Model.Record({ + x: 12.3 + }); + var field = new recline.Model.Field({id: 'x'}); + var out = doc.getFieldValue(field); + var exp = 12.3; + equal(out, exp); + + // bad value + var out = doc.getFieldValue(); + equal(out, ''); +}); + test('Field: default renderers', function () { var doc = new recline.Model.Record({ x: 12.3, @@ -113,8 +127,10 @@ test('Field: custom deriver and renderer', function () { var field = new recline.Model.Field({id: 'computed', is_derived: true}, { deriver: deriver }); + var out1 = doc.getFieldValueUnrendered(field); var out = doc.getFieldValue(field); var exp = 246; + equal(out1, exp); equal(out, exp); var field = new recline.Model.Field({id: 'x'}, {