Fixed Issue ##1235: ObservableArray does not raise its change event when its `length' property is set.

This commit is contained in:
Rossen Hristov
2015-12-11 13:21:12 +02:00
parent 1327f3a094
commit 1717b33622
2 changed files with 41 additions and 2 deletions

View File

@ -606,6 +606,46 @@ export var test_ObservableArray_lastIndexOfShouldReturnCorrectIndexStartingFrom
TKUnit.assert(result === 1, "ObservableArray lastIndexOf() should return correct index!"); TKUnit.assert(result === 1, "ObservableArray lastIndexOf() should return correct index!");
}; };
export var test_ObservableArray_settingLengthToZeroPerformsSplice = function () {
var array = new observableArrayModule.ObservableArray([1, 2, 3]);
var changeRaised = false;
array.on("change", (args: observableArrayModule.ChangedData<number>) => {
changeRaised = true;
TKUnit.assertEqual(args.object, array);
TKUnit.assertEqual(args.eventName, "change");
TKUnit.assertEqual(args.action, observableArrayModule.ChangeType.Splice);
TKUnit.assertEqual(args.index, 0);
TKUnit.assertEqual(args.addedCount, 0);
TKUnit.arrayAssert(args.removed, [1, 2, 3]);
});
array.length = 0;
TKUnit.assertEqual(array.length, 0);
TKUnit.assertTrue(changeRaised);
};
export var test_ObservableArray_settingLengthToSomethingPerformsSplice = function () {
var array = new observableArrayModule.ObservableArray([1, 2, 3]);
var changeRaised = false;
array.on("change", (args: observableArrayModule.ChangedData<number>) => {
changeRaised = true;
TKUnit.assertEqual(args.object, array);
TKUnit.assertEqual(args.eventName, "change");
TKUnit.assertEqual(args.action, observableArrayModule.ChangeType.Splice);
TKUnit.assertEqual(args.index, 1);
TKUnit.assertEqual(args.addedCount, 0);
TKUnit.arrayAssert(args.removed, [2, 3]);
});
array.length = 1;
TKUnit.assertEqual(array.length, 1);
TKUnit.assertTrue(changeRaised);
};
var array = new observableArrayModule.ObservableArray(); var array = new observableArrayModule.ObservableArray();
// We do not have indexer! // We do not have indexer!

View File

@ -70,8 +70,7 @@ export class ObservableArray<T> extends observable.Observable implements observa
} }
set length(value: number) { set length(value: number) {
if (types.isNumber(value) && this._array && this._array.length !== value) { if (types.isNumber(value) && this._array && this._array.length !== value) {
this._array = this._array.slice(0, value); this.splice(value, this._array.length - value);
this._notifyLengthChange();
} }
} }