[Pkg-javascript-commits] [backbone] 39/211: Allowing Model#defaults to be a function as well as a hash.

Jonas Smedegaard js at moszumanska.debian.org
Sat May 3 16:59:59 UTC 2014


This is an automated email from the git hooks/post-receive script.

js pushed a commit to tag 0.5.0
in repository backbone.

commit 331cb8bedea21e61128056608714d7dbd117db86
Author: Jeremy Ashkenas <jashkenas at gmail.com>
Date:   Mon Dec 20 23:00:51 2010 -0500

    Allowing Model#defaults to be a function as well as a hash.
---
 backbone.js   |  6 +++++-
 index.html    |  8 ++++----
 test/model.js | 11 +++++++++++
 3 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/backbone.js b/backbone.js
index 8067adb..8494400 100644
--- a/backbone.js
+++ b/backbone.js
@@ -115,8 +115,12 @@
   // Create a new model, with defined attributes. A client id (`cid`)
   // is automatically generated and assigned for you.
   Backbone.Model = function(attributes, options) {
+    var defaults;
     attributes || (attributes = {});
-    if (this.defaults) attributes = _.extend({}, this.defaults, attributes);
+    if (defaults = this.defaults) {
+      if (_.isFunction(defaults)) defaults = defaults();
+      attributes = _.extend({}, defaults, attributes);
+    }
     this.attributes = {};
     this._escapedAttributes = {};
     this.cid = _.uniqueId('c');
diff --git a/index.html b/index.html
index 8b1353d..9316a3d 100644
--- a/index.html
+++ b/index.html
@@ -642,11 +642,11 @@ if (note.has("title")) {
     </p>
 
     <p id="Model-defaults">
-      <b class="header">defaults</b><code>model.defaults</code>
+      <b class="header">defaults</b><code>model.defaults or model.defaults()</code>
       <br />
-      The <b>defaults</b> hash can be used to specify the default attributes
-      for your model. When creating an instance of the model, any unspecified
-      attributes will be set to their default value.
+      The <b>defaults</b> hash (or function) can be used to specify the default 
+      attributes for your model. When creating an instance of the model, 
+      any unspecified attributes will be set to their default value.
     </p>
 
 <pre class="runnable">
diff --git a/test/model.js b/test/model.js
index b90f77d..5a313dc 100644
--- a/test/model.js
+++ b/test/model.js
@@ -172,6 +172,17 @@ $(document).ready(function() {
     var model = new Defaulted({two: null});
     equals(model.get('one'), 1);
     equals(model.get('two'), null);
+    Defaulted = Backbone.Model.extend({
+      defaults: function() {
+        return {
+          "one": 3,
+          "two": 4
+        };
+      }
+    });
+    var model = new Defaulted({two: null});
+    equals(model.get('one'), 3);
+    equals(model.get('two'), null);
   });
 
   test("Model: change, hasChanged, changedAttributes, previous, previousAttributes", function() {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/backbone.git



More information about the Pkg-javascript-commits mailing list