2013-06-17 7 views
5

J'ai ce code à élimination directe: http://jsfiddle.net/nickbuus/Rwabt/knockoutjs select événement change est déclenché lorsque la liaison

Le problème est que chaque fois que la liste déroulante boîte de sélection est rempli l'événement de changement est appelé:

<select data-bind="options: $root.Categories, optionsText: 'categoryName', optionsValue:  'categoryId', value: CatId, optionsCaption: 'Vælg...', event: { change: $root.selectionChanged }"></select> 

Comment puis-je résoudre ce ?

+2

Pourquoi avez-vous besoin abonnez-vous sur le 'événement change'? Habituellement, la liaison 'value' et l'abonnement sur le changement de propriété value devraient suffire pour la plupart des cas d'utilisation ... – nemesv

+0

Vous devez créer un viewmodel pour vos items et pas seulement le viewmodel parent. Et utilisez plutôt l'abonnement. – Anders

+0

Pouvez-vous me donner un petit échantillon de code sur ce à quoi cela ressemblerait? merci d'avance –

Répondre

2

Il y avait beaucoup de code cassé et utilisé là

http://jsfiddle.net/Rwabt/5/

Celui-ci est corrigée. Qu'est-ce qui a effectivement fait changer d'appel est pour deux raisons, vous avez utilisé la chaîne dans le modèle alimentaire et les numéros dans la catégorie modèle ("1" != 1), Id 2 n'était pas présent dans les catégories (Seulement 1) la catégorie de bière a été définie pour les deux produits alimentaires (Cat.). Puisque KO ne pouvait pas les trouver dans la liste des options, il a réinitialisé la valeur sélectionnée à null.

Cela dit s'il vous plaît jeter un oeil à mon violon pour voir une manière plus KO de faire les choses

+0

En dépit d'être troublé par la relation entre les chats et la bière (bien que je sois tout à fait d'accord), j'ai glané assez de votre exemple pour l'adapter pour résoudre mon propre problème, merci :) – webdevduck

Questions connexes