Skip to content

Commit 7546b7f

Browse files
committed
Fixed Issue #NativeScript#1235: ObservableArray does not raise its change event when its `length' property is set.
1 parent ef163a5 commit 7546b7f

2 files changed

Lines changed: 41 additions & 2 deletions

File tree

apps/tests/observable-array-tests.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,46 @@ export var test_ObservableArray_lastIndexOfShouldReturnCorrectIndexStartingFrom
606606
TKUnit.assert(result === 1, "ObservableArray lastIndexOf() should return correct index!");
607607
};
608608

609+
export var test_ObservableArray_settingLengthToZeroPerformsSplice = function () {
610+
var array = new observableArrayModule.ObservableArray([1, 2, 3]);
611+
612+
var changeRaised = false;
613+
array.on("change", (args: observableArrayModule.ChangedData<number>) => {
614+
changeRaised = true;
615+
TKUnit.assertEqual(args.object, array);
616+
TKUnit.assertEqual(args.eventName, "change");
617+
TKUnit.assertEqual(args.action, observableArrayModule.ChangeType.Splice);
618+
TKUnit.assertEqual(args.index, 0);
619+
TKUnit.assertEqual(args.addedCount, 0);
620+
TKUnit.arrayAssert(args.removed, [1, 2, 3]);
621+
});
622+
623+
array.length = 0;
624+
625+
TKUnit.assertEqual(array.length, 0);
626+
TKUnit.assertTrue(changeRaised);
627+
};
628+
629+
export var test_ObservableArray_settingLengthToSomethingPerformsSplice = function () {
630+
var array = new observableArrayModule.ObservableArray([1, 2, 3]);
631+
632+
var changeRaised = false;
633+
array.on("change", (args: observableArrayModule.ChangedData<number>) => {
634+
changeRaised = true;
635+
TKUnit.assertEqual(args.object, array);
636+
TKUnit.assertEqual(args.eventName, "change");
637+
TKUnit.assertEqual(args.action, observableArrayModule.ChangeType.Splice);
638+
TKUnit.assertEqual(args.index, 1);
639+
TKUnit.assertEqual(args.addedCount, 0);
640+
TKUnit.arrayAssert(args.removed, [2, 3]);
641+
});
642+
643+
array.length = 1;
644+
645+
TKUnit.assertEqual(array.length, 1);
646+
TKUnit.assertTrue(changeRaised);
647+
};
648+
609649
var array = new observableArrayModule.ObservableArray();
610650

611651
// We do not have indexer!

data/observable-array/observable-array.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,7 @@ export class ObservableArray<T> extends observable.Observable implements observa
7070
}
7171
set length(value: number) {
7272
if (types.isNumber(value) && this._array && this._array.length !== value) {
73-
this._array = this._array.slice(0, value);
74-
this._notifyLengthChange();
73+
this.splice(value, this._array.length - value);
7574
}
7675
}
7776

0 commit comments

Comments
 (0)