В этом jsfiddle У меня есть простой пример того, что я хочу делать. Все работает нормально. Но кажется, что должен быть лучший способ создать эти массивы с помощью некоторых циклов или чего-то еще. Я пробовал весь день и не добился успеха. Может кто-нибудь сказать мне, еслиЛучший способ настроить наблюдаемый массив вычисляемых объектов в Knockoutjs
- это возможно
- , что вуду мне нужно выполнить для того, чтобы работать.
Вот код со скрипки.
Вид:
<table>
<tbody>
<tr>
<td></td>
<!-- ko foreach: topvals -->
<td >
<input type="text" data-bind="value: val"/>
</td>
<!-- /ko -->
</tr>
<tr>
<td><input type="text" data-bind="value:sidevals()[0].val"/></td>
<!-- ko foreach: intersections()[0] -->
<td><span data-bind="text: val"></span></td>
<!-- /ko -->
</tr>
<tr>
<td ><input type="text" data-bind="value:sidevals()[1].val"/></td>
<!-- ko foreach: intersections()[1] -->
<td><span data-bind="text: val"></span></td>
<!-- /ko -->
</tr>
</tbody>
</table>
ViewModel:
function ViewModel() {
this.topvals = ko.observableArray([
{ val: ko.observable(6) },
{ val: ko.observable(1) },
{ val: ko.observable(1) },
{ val: ko.observable(1) }
]);
this.sidevals = ko.observableArray([
{ val: ko.observable(1) },
{ val: ko.observable(1) },
{ val: ko.observable(1) }
]);
this.intersections = ko.observableArray([
[
{ val: ko.computed(function() { return this.topvals()[0].val() * this.sidevals()[0].val(); }, this) },
{ val: ko.computed(function() { return this.topvals()[1].val() * this.sidevals()[0].val(); }, this) },
{ val: ko.computed(function() { return this.topvals()[2].val() * this.sidevals()[0].val(); }, this) },
{ val: ko.computed(function() { return this.topvals()[3].val() * this.sidevals()[0].val(); }, this) }
],
[
{ val: ko.computed(function() { return this.topvals()[0].val() * this.sidevals()[1].val(); }, this) },
{ val: ko.computed(function() { return this.topvals()[1].val() * this.sidevals()[1].val(); }, this) },
{ val: ko.computed(function() { return this.topvals()[2].val() * this.sidevals()[1].val(); }, this) },
{ val: ko.computed(function() { return this.topvals()[3].val() * this.sidevals()[1].val(); }, this) }
]
]);
}
ko.applyBindings(new ViewModel());
Было бы особенно полезно, если бы я мог абстрагироваться от «перекрестка», особенно потому, что есть умеренно сложное уравнение, которое должно быть выполнено с помощью topval, sideval и константы. Я еще не понял этого: -/ – jgonyer
Обязательно добавьте KO в зависимости от jsfiddle-зависимостей .. здесь совсем не работает. – user2864740