Bu jsfiddle İçinde çalışmak istediklerimin basit bir örneğim var. Her şey iyi çalışıyor. Ancak bu dizileri bazı döngülerle veya başka bir şeyle oluşturmanın daha iyi bir yolu olmalı gibi görünüyor. Bütün gün uğraşıyorum ve başaramadım. ben o iş için sırayla gerçekleştirmek için gerekenleri voodoo Gözlemlenebilirliği kurmak için daha iyi bir yol Knockoutjs içinde hesaplanmış nesneler kümesi
- eğer birisi bana söyleyebilir.
İşte kemanın kodu.
Görünüm:
<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());
Özellikle "kesişme" yi soyutlatabilmem, özellikle topval, yanval ve sabit ile yapılması gereken orta derecede karmaşık bir denklem olduğu için özellikle yararlı olur. Bunu daha önce de anlamadım: -/ – jgonyer
Jsfiddle bağımlılıklarına manuel olarak KO eklediğinizden emin olun .. burada hiç çalışmıyor. – user2864740