Veuillez considérer l'extrait de vue de la vue suivant: Il semble que mon appel Ajax à travers Si je le laisses commenté, aucun des contrôles ne sont renseignés . P> Des idées, des personnes? p> Le seul travail autour de je pouvais penser est de faire $. Obtenir code> est trop lent ou le
ko.ApplyBindings ( ) code> est trop rapide. De toute façon, il semble que Knockout ne puisse bien se lier que si je ne justifie pas la ligne
alerte ('ici'); code>. P>
.ApplyBindings code> dans le cadre du rappel de la fonction dans
$ .get code> comme ceci: p>
3 Réponses :
Votre solution de contournement est la bonne façon de faire les choses. Ceci est votre gestionnaire de «suite» qui est appelé lorsque les données sont renvoyées et que c'est le point correct pour remplir ensuite votre modèle de vue et appliquer les fixations. P>
Merci Mark, - Je marquais cela comme une réponse pour le moment (je suis relativement nouveau à Knockout).
J'ai eu un problème similaire, même si j'ai eu mes données reliant correctement le modèle, j'ai eu certaines de mes contrôles d'interface utilisateur ne parviennent pas à se lier correctement dans mon modèle. (Le contrôle de l'accordéon fonctionnait, mais la date d'accompagnement de l'accordéon n'est pas) la solution consistait à déplacer le code qui fixe mes pickers, etc. dans une fonction appelée après mon "succès". Quelque chose d'autre pour garder un œil sur. +1 Mark, votre réponse m'a pointé dans la bonne direction.
C'est la bonne réponse - mais je pensais ajouter pourquoi ... - L'appel $ .AJAX est asynchrone, il va donc directement à la ligne suivante - les liaisons applicables. En le mettant dans le rappel, il est appelé après i> le processus asynchrone complète. La meilleure façon de le faire serait de le mettre dans le gestionnaire .Success () de sorte que cela ne le fait que s'il se termine avec succès.
Cette solution de contournement ne fonctionnera que tant que vous n'avez qu'un seul appel AJAX sur la page. Je pense que la bonne solution consiste à créer d'abord votre viewModel, avec ID, donné1 et donnée2 étant observables (initialement vide). Et puis dans le rappel Ajax, vous modifiez la valeur de ces observables. P>
Le moyen plus vrai est exécuté votre appel AJAX à l'intérieur de l'objet ViewModel et peupler ses propriétés. P>
Les deux réponses sont valables, en fonction de ce que vous essayez d'atteindre.
Il suffit de vouloir revoir cela, je crois que ma première façon de penser était toujours dans le domaine de la programmation synchrone. Le bon est le second - en faisant la liaison d'une partie du processus asynchrone.