Vorrei visualizzare un elenco modificabile di elementi, ognuno dei quali è modificabile (un po 'come una griglia modificabile, in un modo). Sto usando KnockoutJS. Non posso usare solo una Observable Array semplice perché, come afferma la documentazione "Un osservableArray tiene traccia di quali oggetti sono nell'array, non lo stato di quegli oggetti"KnockoutJS - Array osservabile di oggetti osservabili
Quindi, ho creato un array osservabile di oggetti osservabili (usando utilità. arrayMap) e li ha associati alla vista. Tuttavia, il problema è che se modifico i dati sullo schermo, qualsiasi modifica dei dati che l'utente apporta sullo schermo non sembra avere effetto. Vedi
Cosa sto facendo male?
<script src="http://cdnjs.cloudflare.com/ajax/libs/knockout/2.0.0/knockout-min.js" type="text/javascript"></script>
<table>
<tbody data-bind="template: { name:'productListJavascriptTemplate', foreach: products}">
</tbody>
</table>
<script type="text/html" id="productListJavascriptTemplate">
<tr>
<td>Name: <input data-bind="value: Name"/></td>
<td>Name: <span data-bind="text: Name"/></td>
<td><select data-bind="options: this.viewModel.categories,
optionsText: 'Name', optionsValue: 'Id', value: CategoryId,
optionsCaption: 'Please select...'"></select></td>
<td>CategoryId: <input data-bind="value: CategoryId"/></td>
</tr>
</script>
var categoryList= [
{
Name: "Electronics",
Id: "1"},
{
Name: "Groceries",
Id: "2"}
];
var initialData= [
{
Name: "Television",
CategoryId: "1"},
{
Name: "Melon",
CategoryId: "2"}
];
var viewModel = {
products: ko.observableArray(
ko.utils.arrayMap(initialData, function(product) {
return ko.observable(product);
})),
categories: ko.observableArray(categoryList)
};
$(function() {
ko.applyBindings(viewModel);
});
perfetto thanksssss! – Andrew