2010-12-29 3 views
2

J'ai un grand viewmodel, et je voudrais publier la mise à jour d'un statut (« lire »/« non lu ») au serveur sans affichage l'ensemble du modèle.Comment utiliser les liaisons personnalisées?

Ce que je l'ai fait est de créer une liaison personnalisée comme ceci:

ko.bindingHandlers.statusUpdater = { 
    update: function(element, valueAccessor) { 
     console.log(element); 
    } 
}; 

Dans le modèle:

<div data-bind='template: { name: "contactsListTemplate", data: viewModel.conversations.conversationlist }'> </div> 

<script type="text/html" id="contactsListTemplate"> 
<table> 
    <tbody> 
    {{each(i, conversation) $data}} 
    <tr> 
    <td> 
     <input type="checkbox" data-bind="checked: read, statusUpdater: conversation_id" /> 
    </td> 
    </tr> 
    {{/each}} 
    </tbody> 
</table> 
</script> 

Pour la liaison personnalisée, je suis seulement intéressé par les mises à jour, ce que je Je pensais que cela me permettrait de détecter une mise à jour avec KnockoutJS, et de déterminer quel élément a été mis à jour pour que je puisse saisir l'ID de cet élément et de nouvelles statistiques, puis le publier sur le serveur.

Ce qui se passe est le CustomBinding est le console.log Ging chaque case à cocher sur une seule modification de case à cocher. Cela signifie que je change une case à cocher et que les trois cases à cocher se connectent à la console via le ko.bindingHandlers.statusUpdater.

Je pensais à l'ajout d'un événement de clic pour la liaison de données, mais cela ne semblait pas aussi propre comme liaison personnalisée. Peut-être que ce que j'essaie de faire avec les liaisons personnalisées n'est pas ce qu'elles sont?

Pensées?

Répondre

4

La raison pour laquelle le fait que parce que la méthode de mise à jour est appelée à chaque moment où la valeur du modèle est mis à jour et au début après la méthode d'initialisation est appelée.

La mise à jour la méthode de liaison est pour vous de définir l'état de l'élément lié dom lorsque les changements de ViewModel. Si vous souhaitez réagir à une modification et mettre à jour le viewModel, vous devez implémenter la méthode init et attacher un événement (clic, changement, etc.) Dans ce gestionnaire, vous pouvez ensuite envoyer la mise à jour de statut à votre viewmodel. La meilleure façon d'apprendre ce que j'ai trouvé était de regarder la version de débogage de KO sur git. Ce que vous voulez réaliser est fondamentalement une liaison vérifiée modifiée avec un appel d'ajax.

Je ne l'ai pas testé ci-dessus, mais il devrait vous aider à démarrer.

Cheers,

Ian

+0

Merci pour cela, mais ce serait le point de vue ressembler à l'intérieur des données-bind = « » Je ne peux pas sembler relier les points encore sur ce knockoutjs choses. Merci – AnApprentice

Questions connexes