La mise à jour du modèle de vue de l'objet ne fonctionne pas
Je veux être en mesure d'observer un objet à l'intérieur du modèle de vue. J'ai un exemple simple qui ne fonctionne pas comme prévu, n'importe qui peut voir le problème?
À l'aide de knock-out 1.1.1, ont 2 entrées en tant que tel:
<form data-bind="submit: save">
<input type="text" data-bind="value: deckName" />
<input type="text" data-bind="value: deck().Name" />
<button type="submit">Go</button>
</form>
Lorsque le chargement de la page, les entrées d'obtenir les valeurs par défaut, mais sur la soumission du formulaire viewModel.deck().Name
n'est pas mis à jour mais viewModel.deckName
est.
<script type="text/javascript">
var initialData = {"Name":"test"};
var viewModel = {
deck: ko.observable(initialData),
deckName: initialData.Name,
save: function() {
ko.utils.postJson(location.href, { deck: this.deck, deckName: this.deckName });
}
};
ko.applyBindings(viewModel);
</script>
Sur le POST de formulaire, deck
va encore envoyer "test" peu importe à l'entrée, tandis que deckName
sera le correspondant de la valeur d'entrée.
Ce que je veux vraiment, c'est être capable d'observer un objet viewModel.deck
et puis de lier ses propriétés d'entrées, mais les propriétés ne sont pas mis à jour.
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs problèmes avec ce que vous avez fournis.
deck().Name
est un valeur statique (par opposition à uneko.observable
ou unko.observableArray
). (Pour prouver ce complémentviewModel.deck({"Name":"updated test"});
à la fin de votre script aprèsko.applyBindings(viewModel);
)deckName
est une façon de liaison - il est écrit lors de la premièreapplyBindings
etviewModel
sera mis à jour par les changements effectués par l'utilisateur ou des scripts à la<input>
. Cependant, si vous apportez des modifications du programme de laviewModel
votre champ de saisie ne sera pas mis à jour pour correspondre. Vous aurez envie de prendre un coup d'oeil à la dernière partie de Knockout.js' la valeur contraignante de la documentation.Une légère amélioration de la version:
Une autre version à l'aide de
fromJS
:Vous aurez envie de chercher à knock-out du
fromJSON
etfromJS
funcitons (mis en œuvre dans son plugin de cartographie).fromJSON
. Le modèle peut être construit par programme; il n'a pas à être mis ensemble en une seule fois.