mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 20:11:24 +08:00
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.assert(propName2 === "property2", "propName2 should be 'property2'");
|
||||
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];
|
||||
}
|
||||
|
||||
private disableNotifications = false;
|
||||
|
||||
public _setCore(data: definition.PropertyChangeData) {
|
||||
this.disableNotifications = true;
|
||||
this[data.propertyName] = data.value;
|
||||
this.disableNotifications = false;
|
||||
}
|
||||
|
||||
public notify<T extends definition.EventData>(data: T) {
|
||||
if (this.disableNotifications) {
|
||||
return;
|
||||
}
|
||||
|
||||
var observers = this._getEventList(data.eventName);
|
||||
if (!observers) {
|
||||
return;
|
||||
@ -134,7 +142,7 @@ export class Observable implements definition.Observable {
|
||||
var i;
|
||||
var entry: ListenerEntry;
|
||||
var observersLength = observers.length;
|
||||
for (i = observersLength - 1; i >= 0 ; i--) {
|
||||
for (i = observersLength - 1; i >= 0; i--) {
|
||||
entry = observers[i];
|
||||
if (entry.thisArg) {
|
||||
entry.callback.apply(entry.thisArg, [data]);
|
||||
|
Reference in New Issue
Block a user