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
});
}