diff --git a/knockout.mapping.js b/knockout.mapping.js index 2ac4a3d..719a04c 100644 --- a/knockout.mapping.js +++ b/knockout.mapping.js @@ -503,7 +503,7 @@ if (!ko.isObservable(mappedRootObject)) { // When creating the new observable array, also add a bunch of utility functions that take the 'key' of the array items into account. - mappedRootObject = ko.observableArray([]); + mappedRootObject = exports.getType(rootObject) === "function" ? rootObject : ko.observableArray([]); mappedRootObject.mappedRemove = function (valueOrPredicate) { var predicate = typeof valueOrPredicate == "function" ? valueOrPredicate : function (value) { diff --git a/spec/issues.js b/spec/issues.js index 3ac3ea8..bad8575 100644 --- a/spec/issues.js +++ b/spec/issues.js @@ -314,3 +314,14 @@ test('Issue #107', function () { equal(model.foo(), "baz"); }); + +//https://github.com/SteveSanderson/knockout.mapping/issues/177 +test('Issue #177', function () { + var model = ko.mapping.fromJS({}); + var o = ko.observable(); + var oa = ko.observableArray(); + + ko.mapping.fromJS({o: o, oa: oa}, model); + equal(model.o, o); + equal(model.oa, oa); +});