Me gustaría mostrar una lista editable de elementos, cada elemento de los cuales es editable (como una cuadrícula editable, en cierto modo). Estoy usando KnockoutJS. No puedo usar simplemente una matriz observable simple porque, como la documentación dice "Un array observable rastrea qué objetos están en la matriz, no el estado de esos objetos"KnockoutJS - Matriz observable de objetos observables
Por lo tanto, he creado una matriz observable de objetos observables (usando utils. arrayMap) y los vinculó a la vista. Sin embargo, el problema es que si edito los datos en la pantalla, los cambios de entrada de datos que realice el usuario en la pantalla no parecen tener efecto. Ver http://jsfiddle.net/AndyThomas/E7xPM/
¿Qué estoy haciendo mal?
<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);
});
perfect thanksssss! – Andrew