diff --git a/backbone.js b/backbone.js index aa36f1e0..3c1e2af1 100644 --- a/backbone.js +++ b/backbone.js @@ -523,7 +523,9 @@ if (this.idAttribute in attrs) { var prevId = this.id; this.id = this.get(this.idAttribute); - this.trigger('changeId', this, prevId, options); + if (this.id !== prevId) { + this.trigger('changeId', this, prevId, options); + } } // Trigger all relevant attribute changes. diff --git a/test/model.js b/test/model.js index d5e20080..23d7d66b 100644 --- a/test/model.js +++ b/test/model.js @@ -1476,4 +1476,15 @@ assert.equal(model.id, 3); }); + QUnit.test('#4289 - Trigger "changeId" need to be generate only if the content id change', function(assert) { + assert.expect(1); + var model = new Backbone.Model({id: 1}); + model.idAttribute = 'id'; + model.on('changeId', function(m) { + assert.equal(m.get('id'), 2); + }); + model.set({id: 1}); + model.set({id: 2}); + }); + })(QUnit);