Je garde la trace des objets supprimés dans un observableArray appelé 'Deletions'. J'analyse ce tableau dans l'interface utilisateur pour créer des liens "Annuler la suppression", mais je n'arrive pas à le faire fonctionner. Le code est très simple et ressemble à ceci :
this.removePage = function(page){
self.formBuilder.pages.destroy(page);
var newDeletion = new Deletion();
newDeletion.element(page);
self.deletions.push(newDeletion);
}
this.removeFormElement = function(element){
self.formElements.destroy(element);
var newDeletion = new Deletion();
newDeletion.element(element);
builder.deletions.push(newDeletion);
}
var Deletion = function(){
var self = this;
this.element = ko.observable();
};
Notez que différents types d'éléments peuvent être ajoutés à l'observableArray Deletions. La seule chose que je dois faire dans la fonction 'unremove' est de mettre l'indicateur 'destroy' à false. Mais je n'arrive pas à le faire fonctionner :
this.unremovePage = function(deletion){
deletion.element()._destroy(false);
}
Quelle est la bonne façon de procéder ?
EDITAR
Je n'arrive pas à le faire fonctionner pour les FormElements imbriqués. La structure est la suivante : mon ViewModel principal s'appelle 'FormBuilder'. Le FormBuilder a plusieurs pages (qui sont elles-mêmes des ViewModels) et chaque page a plusieurs FormElements (voir l'extrait de code ci-dessus).
Je peux "annuler" ces FormElements, mais je n'ai aucune idée de la façon de forcer un rafraîchissement sur eux.
this.unremove = function(deletion){
//console.log(deletion.element);
deletion.element()._destroy = false;
self.deletions.remove(deletion);
self.formBuilder.pages.valueHasMutated(); // works
deletion.element().valueHasMutated(); // this doesn't work
self.formBuilder.pages.indexOf(deletion.element()).valueHasMutated(); // neither does this
self.deletions.valueHasMutated(); // works
};
- FormBuilder est le ViewModel principal ;
- FormBuilder a un observableArray appelé Pages, chaque Page est un ViewModel ;
- Chaque page possède un observableArray appelé FormElements, chaque FormElement est un ViewModel ;
- FormBuilder a un observableArray appelé Deletions, chaque Deletion est un ViewModel et chaque Deletion contient un élément, soit une Page ou un FormElement.
Le problème : J'utilise la fonction 'unremove' pour mettre la propriété 'destroy' de l'élément (soit Page ou FormElement) à false. Comme vous pouvez le voir, j'appelle ensuite 'valueHasUpdated' sur les pages. Mais comment puis-je appeler cela sur l'observableArray formElements
telle que contenue dans une page individuelle ?