Cómo agregar/insertar un elemento en una RAYA DE ALIMENTACIÓN en una posición determinada con knockout.js
-
26-10-2019 - |
Pregunta
Todos los ejemplos de nocaut que he encontrado parecen agregar un nuevo elemento al final de una RAWERABLE usando algo como:
viewModel.SomeItems.push(someNewItem);
Esto, por supuesto, coloca el artículo al final de la matriz.
¿Cómo agrego un elemento a ObservablearRay en una determinada posición?
p.ej. algo como:
viewModel.SomeItems.push(someNewItem, indexToInsertItAt);
Solución
Debería poder usar el JavaScript nativo splice
método -
viewModel.SomeItems.splice(2,0,someNewItem);
Documentos aquí - https://developer.mozilla.org/en/javascript/reference/global_objects/array/splice
Ejemplo aquí (no es específico de Knockout) - ¿Cómo insertar un elemento en una matriz en un índice específico?
De los documentos de Knockout -
Para las funciones que modifican el contenido de la matriz, como Push and Splice, los métodos de KO desencadenan automáticamente el mecanismo de seguimiento de dependencia para que todos los oyentes registrados sean notificados del cambio, y su interfaz de usuario se actualiza automáticamente.
Otros consejos
Para uso de Knockout
viewModel.SomeItems.unshift(someNewItem);
Ver también: http://knockoutjs.com/documentation/observablearrays.html
Hice esta función de extensión que funcionó bien para mí. Splice no funcionaba para mí si estaba agregando al final de una escasa matriz.
ko.observableArray.fn.setAt = function(index, value) {
this.valueWillMutate();
this()[index] = value;
this.valueHasMutated();
}
Esto incluso funciona con:
var a = ko.observableArray(['a', 'b', 'c']);
a.setAt(42, 'the answer');