在看到你的小提琴之後,我嘗試了一個不涉及jQuery的解決方案,使用Knockout將該JavaScript對象映射到HTML表格。
http://jsfiddle.net/EfrainReyes/r6Vke/1/
HTML:
<table>
<thead>
<tr>
<th>Caracteristicas</th>
<!-- ko foreach: planNames -->
<th data-bind="text: $data"></th>
<!-- /ko -->
</tr>
</thead>
<tbody data-bind="foreach: caracteristicas">
<tr>
<td data-bind="text: $data"></td>
<!-- ko foreach: { data: $root.rows($data) } -->
<td data-bind="text: $data ? $data : '...'">
</td>
<!-- /ko -->
</tr>
</tbody>
</table>
JS:
viewModel.planNames = ko.computed(function() {
return ko.utils.arrayMap(this.plans(), function (plan) {
return plan.PlanName();
});
}, viewModel);
viewModel.caracteristicas = ko.computed(function() {
var descripciones = ko.utils.arrayMap(this.plans(), function (plan) {
return ko.utils.arrayMap(plan.Caracteristicas(), function (carac) {
return carac.Descripcion();
});
});
return ko.utils.arrayGetDistinctValues(descripciones.reduce(function (x,y) {
return x.concat(y);
}));
}, viewModel);
viewModel.rows = function(caracteristica) {
var cars = ko.utils.arrayMap(this.plans(), function (plan) {
var valor = null;
var car = ko.utils.arrayFirst(plan.Caracteristicas(), function(carac) {
return carac.Descripcion() === caracteristica;
});
if (car && car.Valor) {
valor = car.Valor();
}
return valor;
});
return cars;
};
ko.applyBindings(viewModel);
你的意思是在不工作?你如何使用下面的綁定?你可以創建一個JSFiddle來演示你的問題> – nemesv
按預期工作http://jsfiddle.net/pw9bv/ – Ilya