Todos los octavos de ejemplos que he encontrado parece añadir un nuevo elemento al final de una ObservableArray usando algo como:

viewModel.SomeItems.push(someNewItem);

Esto, por supuesto, coloca el tema en la final de la matriz.

¿Cómo puedo añadir un elemento a la ObservableArray en una posición determinada?

por ejemplo. algo así como:

viewModel.SomeItems.push(someNewItem, indexToInsertItAt);

3 Comentarios

  1. 82

    Usted debería ser capaz de utilizar los nativos de JavaScript splice método –

    viewModel.SomeItems.splice(2,0,someNewItem);

    Docs aquí – https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice

    Ejemplo aquí (no Knockout específico) – Cómo insertar un elemento en una matriz en un índice específico?

    De los octavos de final docs –

    Para las funciones que modifican el contenido de la matriz, tales como push y
    empalme, KO métodos activar automáticamente el seguimiento de dependencia
    el mecanismo, así que todos los detectores registrados son notificados del cambio,
    y su interfaz de usuario se actualiza automáticamente.

    • Gracias. Empalme trabajado. Por knock-out de los usuarios, ko.utils.arrayIndexOf también es útil si usted quiere encontrar el índice de insertar el nuevo elemento basado en un elemento existente.
    • Esto no funcionará con matrices dispersas, al menos no para mí en chrome. Véase mi respuesta a continuación
  2. 22

    Por nocaut uso

    viewModel.SomeItems.unshift(someNewItem);

    Ver también: http://knockoutjs.com/documentation/observableArrays.html

    • Esta insertar el elemento al principio de la matriz, de modo que no ayuda si desea insertar un elemento seomwhere en el medio.
    • De alguna manera me perdí la parte sobre la inserción en cualquier lugar en la matriz. Sí, esto sólo funciona si usted desea insertar en el principio. Lo siento por eso.
    • Mhh me parece que no puede crear un fresco de la animación a la hora de insertar
  3. 12

    Hice esta función de extensión que trabajó muy bien para mí. Empalme no estaba funcionando para mí, si yo estaba añadiendo al final de una matriz dispersa.

    ko.observableArray.fn.setAt = function(index, value) {
        this.valueWillMutate();
        this()[index] = value;
        this.valueHasMutated();
    }

    Esto también funciona con:

    var a = ko.observableArray(['a', 'b', 'c']);
    a.setAt(42, 'the answer');
    • Y si quieres hacer insertAt en lugar de setAt, solo tienes que cambiar this()[index] = value; a this.splice(index, 0, value);. Gracias Adán!

Dejar respuesta

Please enter your comment!
Please enter your name here