[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:
parent
595a4aea7a
commit
6927f15e79
|
@ -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];
|
||||
|
|
|
@ -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() {
|
||||
|
|
Loading…
Reference in New Issue