diff --git a/apps/tests/observable-array-tests.ts b/apps/tests/observable-array-tests.ts index 6a4b852fd..40b3b960c 100644 --- a/apps/tests/observable-array-tests.ts +++ b/apps/tests/observable-array-tests.ts @@ -85,6 +85,31 @@ export var test_ObservableArray_setItemShouldSetCorrectItem = function () { TKUnit.assert(array.getItem(1) === 5, "ObservableArray setItem() should set correct item!"); }; +export var test_ObservableArray_setItemShouldRaiseCorrectEvent = function () { + // + // ### Set item at specified index using setItem(index, item) method and observe change event data. + // ``` JavaScript + var index: number; + var action: string; + var addedCount: number; + var removed: Array; + + var array = new observableArrayModule.ObservableArray([1, 2, 3]); + array.on("change", (args) => { + index = args.index; // Index of the changed item. + action = args.action; // Action. In this case Update. + addedCount = args.addedCount; // Number of added items. In this case 1. + removed = args.removed; // Array of removed items. In this case with single item (2). + }); + array.setItem(1, 5); + // ``` + // + TKUnit.assertEqual(index, 1); + TKUnit.assertEqual(action, observableArrayModule.ChangeType.Update); + TKUnit.assertEqual(addedCount, 1); + TKUnit.assertEqual(removed[0], 2); +}; + export var test_ObservableArray_concatShouldReturnNewArrayWithNewItemsAtTheEnd = function () { // // ### Use concat() method to combine ObservableArray with array. @@ -567,7 +592,7 @@ export var test_ObservableArray_lastIndexOfShouldReturnCorrectIndex = function ( var result = array.lastIndexOf("two"); // ``` // - TKUnit.assert(result === 2, "ObservableArray lastIndexOf() should return correct index!"); + TKUnit.assert(result === 2, "ObservableArray lastIndexOf() should return correct index!"); }; export var test_ObservableArray_lastIndexOfShouldReturnCorrectIndexStartingFrom = function () { diff --git a/data/observable-array/observable-array.ts b/data/observable-array/observable-array.ts index b026da7c1..76025f2ac 100644 --- a/data/observable-array/observable-array.ts +++ b/data/observable-array/observable-array.ts @@ -50,13 +50,14 @@ export class ObservableArray extends observable.Observable implements observa return this._array[index]; } setItem(index: number, value: T) { + let oldValue = this._array[index]; this._array[index] = value; this.notify(>{ eventName: CHANGE, object: this, action: ChangeType.Update, index: index, - removed: new Array(1), + removed: [oldValue], addedCount: 1 }); }