2011-06-07 6 views
8

¿Cuál es la mejor manera de manejar una matriz observable que puede ser comprometida/desechada en KnockoutJS?¿Admite knockoutJS la matriz observable protegida?

He logrado esto antes con la idea ProtectedObservable, pero esto fue en un solo registro de datos, no en una matriz.

Simplemente me preguntaba cómo seguir adelante. Mi proyecto requiere un diálogo de todos los contactos de la dirección de correo electrónico y una lista de los seleccionados. A medida que se agregan de una lista a la izquierda, se eliminan y se agregan a una lista a la derecha.

Cuando se presiona el botón 'Aceptar', se agregan al campo Para: pero cuando se presiona 'cancelar', las listas vuelven a su estado anterior (que ya se habrían llenado antes).

Respuesta

11

¿Qué tal algo como esto: http://jsfiddle.net/rniemeyer/PAzVk/

Este utiliza un observableArray que apoya "instantáneas". Puede guardar una copia de la matriz subyacente y restaurarla siempre que lo necesite.

ko.snapShotObservableArray = function(initialData) { 
    var _snapShot = initialData; 
    var result = ko.observableArray(initialData || []); 

    result.takeSnapShot = function() { 
     _snapShot = this().slice(); //take a copy of the underlying array 
    }; 

    result.restoreSnapShot = function() { 
     this(_snapShot.slice()); 
    } 

    return result; 
} 

En la muestra, se usaría esto en usted gama de usuarios disponibles, gran variedad de usuarios seleccionados, y el conjunto de los usuarios en la línea "A". Luego, el botón Cancelar restaura cada matriz de regreso al punto en que tomó la última instantánea.

+0

Actualización menor a restoreSnapshot, ya que debe ser una copia. –

+0

Como siempre, una solución fantástica. Gracias Ryan. –

Cuestiones relacionadas