Я попытаюсь сделать упрощенный пример проблемы, которая у меня есть. Я думаю, что я очень близок к решению, но мне нужна ваша помощь с последним штрихом.
Допустим, у меня есть модель представления, которая выглядит так:
function viewModel(){
var self = this;
self.foo = ko.observable();
self.bars = ko.observableArray();
}
function bar(data){
var self = this;
self.baz = ko.observable();
ko.mapping.fromJS(data, mapperSettings, self);
}
Я использую плагин ko.mapping для сопоставления некоторых данных с сервера:
var mapperSettings = {
bars: {
create: function(options) {
return new bar(options.data);
}
}
};
var dummyData = {
foo: '1',
bars: [{ baz: 1 }, { baz: 2 }]
};
var vm = new viewModel();
ko.mapping.fromJS(dummyData, mapperSettings, vm);
Пока все в порядке.
Теперь я хотел бы дополнить модель представления и ее элементы некоторыми дополнительными вычисляемыми свойствами. Мне удалось успешно добавить его в модель представления (something_computed
ниже), но мне не удалось добавить вычисляемое свойство к элементу списка — свойство computed
к элементу bar
ниже:
var settings = {
create: function(options) {
var model = ko.mapping.fromJS(options.data, {
bars: {
create: function (options) {
// why is this callback called 4 times and not 2?
var self = options.data;
self.computed = ko.computed(function(){
return this.baz() + ' comp';
}, self);
return self;
}
}
});
model.something_computed = ko.computed(function(){
return this.foo() + '...';
}, model);
return model;
}
};
var newViewModel = ko.mapping.fromJS(vm, settings);
ko.applyBindings(newViewModel);
create
вызывается более двух раз... - person Johan   schedule 06.03.2016baz
, так что вы можете их закоротить. jsfiddle.net/4s6jsLx1/7 - person Roy J   schedule 06.03.2016