У меня есть коллекция предметов, которые я хотел бы отобразить как общее, так и индивидуальное процентное содержание каждого предмета.Кажется, проблема в том, что мне нужна ссылка на родительский объект при вычислении суммы.Поэтому я решил определить вычисленный getTotal для коллекции и процент для элемента.
function Collection() {
var self = this;
self.parts = ko.observableArray();
self.getTotal = ko.computed(function() {
var total = self.parts.length;
return total;
});
}
function Part(amount, parent) {
var self = this;
self.amount = ko.observable(amount);
self.parent = parent;
self.percentage = ko.computed(function() {
return self.amount() / self.parent.getTotal();
});
}
var partsData = [40, 50, 30];
var collection = new Collection();
for (var i = 0; i < partsData.length; ++i) {
collection.parts.push(new Part(partsData[i], collection));
}
ko.applyBindings(collection);
И мой HTML-код
<ul data-bind="foreach: parts">
<li>
<p data-bind="text: amount"></p>
<p data-bind="text: percentage"></p>
</li>
</ul>
Однако Collection.parts всегда пуст,По какой-то причине нажмите на нее, не вызывая пересчеты элементов.
И правильно ли это делать?Теперь я могу понять, как можно одновременно создать массив observableArray в коллекции, в то же время давая каждому дочернему элементу ссылку на родительский объект.