Skip to content

Commit 4488374

Browse files
committed
nested silent changes should not trigger change events
1 parent d63fe9e commit 4488374

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

backbone.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@
333333
unset ? delete current[attr] : current[attr] = val;
334334
}
335335

336-
if (changes.length) this._pending = true;
336+
if (!silent && changes.length) this._pending = true;
337337

338338
// Trigger all relevant attribute changes.
339339
if (!silent) {

test/model.js

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -745,7 +745,7 @@ $(document).ready(function() {
745745
model.set({y: true});
746746
});
747747
model.set({x: true});
748-
deepEqual(events, ['change:y', 'change:x', 'change', 'change']);
748+
deepEqual(events, ['change:y', 'change:x', 'change']);
749749
events = [];
750750
model.set({z: true});
751751
deepEqual(events, []);
@@ -786,7 +786,7 @@ $(document).ready(function() {
786786
model.set({x: true});
787787
});
788788

789-
test("nested `'change'` with silent", 3, function() {
789+
test("nested `change` with silent", 3, function() {
790790
var count = 0;
791791
var model = new Backbone.Model();
792792
model.on('change:y', function() { ok(false); });
@@ -795,22 +795,23 @@ $(document).ready(function() {
795795
case 0:
796796
deepEqual(this.changedAttributes(), {x: true});
797797
model.set({y: true}, {silent: true});
798+
model.set({z: true});
798799
break;
799800
case 1:
800-
deepEqual(this.changedAttributes(), {x: true, y: true});
801+
deepEqual(this.changedAttributes(), {x: true, y: true, z: true});
801802
break;
802803
case 2:
803-
deepEqual(this.changedAttributes(), {z: true});
804+
deepEqual(this.changedAttributes(), {z: false});
804805
break;
805806
default:
806807
ok(false);
807808
}
808809
});
809810
model.set({x: true});
810-
model.set({z: true});
811+
model.set({z: false});
811812
});
812813

813-
test("nested `'change:attr'` with silent", 0, function() {
814+
test("nested `change:attr` with silent", 0, function() {
814815
var model = new Backbone.Model();
815816
model.on('change:y', function(){ ok(false); });
816817
model.on('change', function() {
@@ -1053,4 +1054,13 @@ $(document).ready(function() {
10531054
model.save({x: 1}, {wait: true});
10541055
});
10551056

1057+
test("#2034 - nested set with silent only triggers one change", 1, function() {
1058+
var model = new Backbone.Model();
1059+
model.on('change', function() {
1060+
model.set({b: true}, {silent: true});
1061+
ok(true);
1062+
});
1063+
model.set({a: true});
1064+
});
1065+
10561066
});

0 commit comments

Comments
 (0)