Je crée des fonctionnalités sur une page Web que l'utilisateur peut exécuter plusieurs fois. Grâce à l'action de l'utilisateur, un objet / modèle est créé et appliqué au HTML à l'aide de ko.applyBindings ().
Le HTML lié aux données est créé via des modèles jQuery.
Jusqu'ici tout va bien.
Lorsque je répète cette étape en créant un deuxième objet / modèle et en appelant ko.applyBindings (), je rencontre deux problèmes:
- Le balisage montre l'objet / modèle précédent ainsi que le nouvel objet / modèle.
- Une erreur javascript se produit concernant l'une des propriétés de l'objet / modèle, bien qu'elle soit toujours rendue dans le balisage.
Pour contourner ce problème, après le premier passage, j'appelle .empty () de jQuery pour supprimer le modèle HTML qui contient tous les attributs de liaison de données, afin qu'il ne soit plus dans le DOM. Lorsque l'utilisateur démarre le processus pour la deuxième passe, le code HTML lié aux données est de nouveau ajouté au DOM.
Mais comme je l'ai dit, lorsque le HTML est de nouveau ajouté au DOM et lié au nouvel objet / modèle, il inclut toujours les données du premier objet / modèle, et j'obtiens toujours l'erreur JS qui ne se produit pas lors du premier passage.
La conclusion semble être que Knockout tient à ces propriétés liées, même si le balisage est supprimé du DOM.
Donc, ce que je recherche, c'est un moyen de supprimer ces propriétés liées de Knockout; dire à KO qu'il n'y a plus de modèle observable. Y a-t-il un moyen de faire cela?
ÉDITER
Le processus de base est que l'utilisateur télécharge un fichier; le serveur répond alors avec un objet JSON, le HTML lié aux données est ajouté au DOM, puis le modèle d'objet JSON est lié à ce HTML en utilisant
mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);
Une fois que l'utilisateur a effectué certaines sélections sur le modèle, le même objet est renvoyé sur le serveur, le HTML lié aux données est supprimé du DOM, et j'ai alors le JS suivant
mn.AccountCreationModel = null;
Lorsque l'utilisateur souhaite recommencer, toutes ces étapes sont répétées.
J'ai peur que le code soit trop «impliqué» pour faire une démo jsFiddle.
init
fonction dans laquelle vous passez les données à appliquer?