Ho una tabella in questo modo:knockout foreach nel bel mezzo di un tavolo
<table>
<thead>
<tr>
<td>Column 1</td><td>Column 2</td>
</tr>
</thead>
<tr>
<td>static 1a</td><td>static 2a</td>
</tr>
<tr>
<td>dynamic 1b</td><td>dynamic 2b</td>
</tr>
<tr>
<td>dynamic 1c</td><td>dynamic 2c</td>
</tr>
</table>
I campi dinamici bisogno di essere un foreach per iterare eliminazione diretta tutte le proprietà dell'oggetto. L'unica cosa che posso pensare di fare è qualcosa di simile:
<tbody data-bind="foreachprop: properties">
<tr><td><span data-bind="text: propertyName"></span></td><td><span data-bind="text: value"></span></td></tr>
</tbody>
Quali opere tecnicamente, ma le viti con il mio stile perché la riga statica dovrebbe essere parte del tbody. Cos'altro posso associare a ciascuno di essi? Devo perdere una soluzione semplice.
aggiornamento: In realtà non sto usando "foreach", sto usando una funzione personalizzata che itera attraverso le proprietà. Quando provo ad usare < - ko foreachprop:! > proprietà - ricevo il seguente errore console:
Uncaught Error: The binding 'foreachprop' cannot be used with virtual elements
Ecco la funzione foreachprop
ko.bindingHandlers.foreachprop = {
transformObject: function (obj) {
var properties = [];
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
var newObj = obj[key];
newObj.propertyName = key;
properties.push(newObj);
}
}
return properties;
},
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var value = ko.utils.unwrapObservable(valueAccessor()),
properties = ko.bindingHandlers.foreachprop.transformObject(value);
ko.applyBindingsToNode(element, { foreach: properties });
return { controlsDescendantBindings: true };
}
};
Steve Sanderson è un genio. – MrBoJangles
Eventuali effetti collaterali di farlo in questo modo? Cambiamenti delle prestazioni, ecc.? –
Cattive notizie, aggiornando la mia domanda. Scusate. –