Cómo agregar/insertar un elemento en una RAYA DE ALIMENTACIÓN en una posición determinada con knockout.js

StackOverflow https://stackoverflow.com/questions/7317907

  •  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);
¿Fue útil?

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');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top