2011-06-07 1 views
8

Quelle est la meilleure façon de gérer un tableau observable qui peut être validé/jeté dans KnockoutJS?Est-ce que knockoutJS prend en charge un tableau observable protégé?

Je l'ai déjà fait avec l'idée ProtectedObservable mais c'était sur un seul enregistrement de données, pas sur un tableau.

Je me demandais comment aller de l'avant. Mon projet nécessite un dialogue de tous les contacts de l'adresse e-mail et une liste de ceux sélectionnés. Comme ils sont ajoutés à partir d'une liste sur la gauche, ils sont supprimés et ajoutés à une liste sur la droite. Lorsque le bouton 'ok' est enfoncé, ils sont ajoutés dans le champ To: mais lorsque vous appuyez sur 'cancel', les listes sont restaurées dans leur état précédent (qui aurait déjà pu être rempli auparavant).

Répondre

11

Que diriez-vous quelque chose comme ceci: http://jsfiddle.net/rniemeyer/PAzVk/

Il utilise un observableArray qui prend en charge "snapshots". Vous pouvez enregistrer une copie du tableau sous-jacent et le restaurer lorsque vous en avez besoin.

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; 
} 

Dans l'exemple, vous utiliser sur vous éventail d'utilisateurs disponibles, éventail d'utilisateurs sélectionnés, et éventail d'utilisateurs sur la ligne « A ». Ensuite, le bouton Annuler restaure chaque tableau au point où vous avez pris le dernier instantané.

+0

Mise à jour mineure de restoreSnapshot, car il doit être une copie. –

+0

Comme toujours, une solution fantastique. Merci Ryan. –

Questions connexes