From 6927f15e79c654de34b1aa75cbe52a251dc9d521 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 16 Mar 2012 11:03:34 +0100 Subject: [PATCH] [imp] changed novajs to fire change events only when something really changed bzr revid: nicolas.vanhoren@openerp.com-20120316100334-h9o58afhmzucbrn7 --- addons/web/static/lib/novajs/src/nova.js | 7 ++++++- addons/web/static/lib/novajs/test/test.js | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/addons/web/static/lib/novajs/src/nova.js b/addons/web/static/lib/novajs/src/nova.js index 2a593611165..848bcbc1407 100644 --- a/addons/web/static/lib/novajs/src/nova.js +++ b/addons/web/static/lib/novajs/src/nova.js @@ -313,15 +313,20 @@ nova = (function() { }, set: function(map) { var self = this; + var changed = false; _.each(map, function(val, key) { var tmp = self.__getterSetterInternalMap[key]; + if (tmp === val) + return; + changed = true; self.__getterSetterInternalMap[key] = val; self.trigger("change:" + key, self, { oldValue: tmp, newValue: val }); }); - self.trigger("change", self); + if (changed) + self.trigger("change", self); }, get: function(key) { return this.__getterSetterInternalMap[key]; diff --git a/addons/web/static/lib/novajs/test/test.js b/addons/web/static/lib/novajs/test/test.js index 60ef8b966e6..45bfed69485 100644 --- a/addons/web/static/lib/novajs/test/test.js +++ b/addons/web/static/lib/novajs/test/test.js @@ -100,6 +100,23 @@ test("base", function() { equal(tmp, 1); }); +test("change event only when changed", function() { + var Claz = nova.Class.extend(_.extend({}, nova.GetterSetterMixin, {})); + var x = new Claz(); + var exec1 = false; + var exec2 = false; + x.on("change:test", null, function() {exec1 = true;}); + x.on("change", null, function() {exec2 = true;}); + x.set({"test": 3}); + equal(exec1, true); + equal(exec2, true); + exec1 = false; + exec2 = false; + x.set({"test": 3}); + equal(exec1, false); + equal(exec2, false); +}); + module("Widget"); test("base", function() {