Estoy seguro de que esta será una respuesta fácil para alguien. Tengo el siguiente modelo de vista:eliminar de observableArray- knockoutjs
@{
var initialData = new JavaScriptSerializer().Serialize(Model);
}
var data = @Html.Raw(initialData);
function ViewModel(data) {
var self = this;
self.Name = ko.observable(data.Name);
self.Items = ko.observableArray(data.Items);
self.addItem = function() { self.Items.push(""); };
self.removeItem = function(data) { self.Items.remove(data); }
}
$(document).ready(function() {ko.applyBindings(new ViewModel(data)); });
Y los próximos:
<div>
Name: <span data-bind="text: Name"></span>
</div>
<div>
Items: <button data-bind="click: addItem">Add Item</button>
</div>
<div>
<table>
<tbody data-bind="template: { name: 'itemTemplate', foreach: Items }"></tbody>
</table>
</div>
<script type="text/html" id="itemTemplate">
<tr>
<td>
<input data-bind="value: $data" />
<a href="#" data-bind="click: function() {$parent.removeItem($data)}">Remove Item</a>
</td>
</tr>
</script>
todo parece funcionar correctamente a excepción de removeItem
. Cuando se agreguen nuevas filas y se haga clic en "Eliminar elemento" en una nueva fila vacía, todas las nuevas filas se eliminarán con ella. He visto un montón de tutoriales knockout tratando de hacer que esto funcione, y mi método parece ser un intento válido, pero obviamente ... Me falta algo. ¿Alguna sugerencia?
Me gusta mucho su enfoque en jsfiddle, pero no mencioné que tendré que volver a publicar este modelo en el servidor. Eso significa que 'Items' necesita ser una cadena []. Entonces supongo que eso significa que debería ir a la ruta de $ index, ¿correcto? –
No necesariamente. Hay varias formas de garantizar que la salida JSON vuelva al estado que desea. Le daré alguna información a la respuesta. –
Te daría dos ups si pudiera. Respuesta muy útil. –