From bdbcfa9da28e86313491de515709625c569e2bb6 Mon Sep 17 00:00:00 2001 From: Magnus Holm Date: Sun, 4 Dec 2011 17:48:47 +0100 Subject: [PATCH] parse:true runs the attributes through parse(): `new Model(attr, {parse:true})` will now call Model.prototype.parse(attr). This is useful if you want to create a model out of an object structure from an external server. --- backbone.js | 1 + test/model.js | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/backbone.js b/backbone.js index dabed49b..805ce42c 100644 --- a/backbone.js +++ b/backbone.js @@ -127,6 +127,7 @@ Backbone.Model = function(attributes, options) { var defaults; attributes || (attributes = {}); + if (options && options.parse) attributes = this.parse(attributes); if (defaults = this.defaults) { if (_.isFunction(defaults)) defaults = defaults.call(this); attributes = _.extend({}, defaults, attributes); diff --git a/test/model.js b/test/model.js index b0e05967..85c6602c 100644 --- a/test/model.js +++ b/test/model.js @@ -51,6 +51,17 @@ $(document).ready(function() { equals(model.one, 1); }); + test("Model: initialize with parsed attributes", function() { + var Model = Backbone.Model.extend({ + parse: function(obj) { + obj.value += 1; + return obj; + } + }); + var model = new Model({value: 1}, {parse: true}); + equals(model.get('value'), 2); + }); + test("Model: url", function() { equals(doc.url(), '/collection/1-the-tempest'); doc.collection.url = '/collection/';