Благодаря Питеру Уайлсу у меня очень похожее решение:
var ViewModel = function (data, ranges) {
var self = this;
this.productList = ko.observableArray();
var productListMapping = {
create: function (options) {
return (new (function () {
//this row above i don't understand...
this.len = ko.computed(function () {
//just test function returning lenght of object name
// and one property of this model
return this.name().length + ' ' + self.cons_slider_1();
}, this);
ko.mapping.fromJS(options.data, {}, this); // continue the std mapping
})());
}
}
this.cons_slider_1 = ko.observable(100);
ko.mapping.fromJS(data, productListMapping, this.productList);
};
Некоторые отличия:
Я не привязываюсь к себе, но к этому. Продукту.
Входной JSON не имеет родительского имени, как «Brokers» в приведенном выше примере:
var products = [
{ "id": "pp1", "name": "Blue windy" },
{ "id": "pp1", "name": "Blue windy" }];
Итак, в productMapping я набираю просто 'create:'
Но что я не понимаю, так это структура функции создания. Может кто-нибудь объяснить мне, почему функция возвращает новую функцию, которая имеет свойство. Разве это не может быть как-то упрощено?