[imp] changed novajs to fire change events only when something really changed

bzr revid: nicolas.vanhoren@openerp.com-20120316100334-h9o58afhmzucbrn7
This commit is contained in:
niv-openerp 2012-03-16 11:03:34 +01:00
parent 595a4aea7a
commit 6927f15e79
2 changed files with 23 additions and 1 deletions

View File

@ -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];

View File

@ -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() {