Skip to content

Commit 13ceba4

Browse files
committed
Merge pull request #133 from fcamblor/fix-previous
Fix previous
2 parents ac196af + 0b5c06b commit 13ceba4

File tree

2 files changed

+45
-11
lines changed

2 files changed

+45
-11
lines changed

backbone-nested.js

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,11 @@
2727
Backbone.NestedModel = Backbone.Model.extend({
2828

2929
get: function(attrStrOrPath){
30-
var attrPath = Backbone.NestedModel.attrPath(attrStrOrPath),
31-
result;
32-
33-
Backbone.NestedModel.walkPath(this.attributes, attrPath, function(val, path){
34-
var attr = _.last(path);
35-
if (path.length === attrPath.length){
36-
// attribute found
37-
result = val[attr];
38-
}
39-
});
30+
return Backbone.NestedModel.walkThenGet(this.attributes, attrStrOrPath);
31+
},
4032

41-
return result;
33+
previous: function(attrStrOrPath){
34+
return Backbone.NestedModel.walkThenGet(this._previousAttributes, attrStrOrPath);
4235
},
4336

4437
has: function(attr){
@@ -366,6 +359,21 @@
366359
val = val[childAttr];
367360
if (!val) break; // at the leaf
368361
}
362+
},
363+
364+
walkThenGet: function(attributes, attrStrOrPath){
365+
var attrPath = Backbone.NestedModel.attrPath(attrStrOrPath),
366+
result;
367+
368+
Backbone.NestedModel.walkPath(attributes, attrPath, function(val, path){
369+
var attr = _.last(path);
370+
if (path.length === attrPath.length){
371+
// attribute found
372+
result = val[attr];
373+
}
374+
});
375+
376+
return result;
369377
}
370378

371379
});

test/nested-model.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,32 @@ $(document).ready(function() {
121121
});
122122

123123

124+
// ----- PREVIOUS --------
125+
126+
test("$previous() 1-1 undefined previous at init", function() {
127+
equal(doc.previous("gender"), undefined);
128+
equal(doc.previous("name"), undefined);
129+
equal(doc.previous("name.first"), undefined);
130+
equal(doc.previous("unknown"), undefined);
131+
equal(doc.previous("unknown2.field"), undefined);
132+
});
133+
134+
test("$previous() 1-1 previous returning last value", function() {
135+
doc.set("gender", 'F');
136+
equal(doc.previous("gender"), 'M');
137+
138+
doc.set("name.first", "blah");
139+
equal(doc.previous("name.first"), 'Aidan');
140+
141+
doc.set("unknown", "blah");
142+
equal(doc.previous("unknown"), undefined);
143+
144+
doc.set("unknown2.field", "blah");
145+
equal(doc.previous("unknown2.field"), undefined);
146+
doc.set("unknown2.field", "bleh");
147+
equal(doc.previous("unknown2.field"), "blah");
148+
});
149+
124150
// ----- HAS --------
125151

126152
test("#get() 1-1", function() {

0 commit comments

Comments
 (0)