einzurichten In diesem jsfiddle habe ich ein einfaches Beispiel für das, was ich tun möchte. Es funktioniert alles gut. Aber es scheint, als müsste es einen besseren Weg geben, diese Arrays mit einigen Schleifen oder etwas zu erstellen. Ich habe den ganzen Tag versucht und es ist mir nicht gelungen. Kann mir jemand sagen, obEine bessere Möglichkeit, ObservableArray von berechneten Objekten in Knockoutjs
- es möglich ist,
- was Voodoo ich ausführen müssen, um für sie zu arbeiten.
Hier ist der Code von der Geige.
Ausblick:
<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>
Ansichtsmodell:
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());
Es wäre besonders hilfreich, wenn ich eine "Kreuzung" abstrahieren könnte, besonders da es eine moderat komplizierte Gleichung gibt, die mit der topval, sideval und einer Konstante gemacht werden muss. Ich habe das auch noch nicht herausgefunden: -/ – jgonyer
Stellen Sie sicher, dass Sie KO den jsfiddle Abhängigkeiten manuell hinzufügen .. funktioniert hier überhaupt nicht. – user2864740