mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 11:42:04 +08:00
Merge pull request #970 from NativeScript/nnikolov/Issue966
Fixed two propertyChange event notifications.
This commit is contained in:
@ -478,4 +478,16 @@ export var test_ObservablesCreatedWithJSON_shouldNotInterfereWithOneAnother = fu
|
|||||||
TKUnit.wait(0.1);
|
TKUnit.wait(0.1);
|
||||||
TKUnit.assert(propName2 === "property2", "propName2 should be 'property2'");
|
TKUnit.assert(propName2 === "property2", "propName2 should be 'property2'");
|
||||||
TKUnit.assert(newValue2 === 20, "newValue2 should be 20");
|
TKUnit.assert(newValue2 === 20, "newValue2 should be 20");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export function test_ObservablesCreatedWithJSON_shouldNotEmitTwoTimesPropertyChangeEvent() {
|
||||||
|
var testObservable = new observable.Observable({ "property1": 1 });
|
||||||
|
var propertyChangeCounter = 0;
|
||||||
|
var propertyChangeHandler = function (args) {
|
||||||
|
propertyChangeCounter++;
|
||||||
|
}
|
||||||
|
testObservable.on(observable.Observable.propertyChangeEvent, propertyChangeHandler);
|
||||||
|
testObservable.set("property1", 2);
|
||||||
|
|
||||||
|
TKUnit.assertEqual(propertyChangeCounter, 1, "PropertyChange event should be fired only once for a single change.");
|
||||||
|
}
|
@ -121,11 +121,19 @@ export class Observable implements definition.Observable {
|
|||||||
return this[name];
|
return this[name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private disableNotifications = false;
|
||||||
|
|
||||||
public _setCore(data: definition.PropertyChangeData) {
|
public _setCore(data: definition.PropertyChangeData) {
|
||||||
|
this.disableNotifications = true;
|
||||||
this[data.propertyName] = data.value;
|
this[data.propertyName] = data.value;
|
||||||
|
this.disableNotifications = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public notify<T extends definition.EventData>(data: T) {
|
public notify<T extends definition.EventData>(data: T) {
|
||||||
|
if (this.disableNotifications) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var observers = this._getEventList(data.eventName);
|
var observers = this._getEventList(data.eventName);
|
||||||
if (!observers) {
|
if (!observers) {
|
||||||
return;
|
return;
|
||||||
@ -134,7 +142,7 @@ export class Observable implements definition.Observable {
|
|||||||
var i;
|
var i;
|
||||||
var entry: ListenerEntry;
|
var entry: ListenerEntry;
|
||||||
var observersLength = observers.length;
|
var observersLength = observers.length;
|
||||||
for (i = observersLength - 1; i >= 0 ; i--) {
|
for (i = observersLength - 1; i >= 0; i--) {
|
||||||
entry = observers[i];
|
entry = observers[i];
|
||||||
if (entry.thisArg) {
|
if (entry.thisArg) {
|
||||||
entry.callback.apply(entry.thisArg, [data]);
|
entry.callback.apply(entry.thisArg, [data]);
|
||||||
|
Reference in New Issue
Block a user