Knockout.js cliquez sur la liaison avec les paramètres
J'ai ce petit ViewModel:
function BooksViewModel() {
var self = this;
self.books = ko.observableArray(library);
self.findByLanguage = function(lang) {
self.books = ko.computed(function() {
return ko.utils.arrayFilter(library, function(book) {
return book.language() === lang;
});
});
};
}
La findByLanguage méthode des filtres de la matrice par la langue. Dans la vue, im tryign à mettre en œuvre que comme ceci:
<ul class="dropdown-menu">
<li><a tabindex="-1" href="#" data-bind="click: findByLanguage('C')">C</a></li>
<li><a tabindex="-1" href="#" data-bind="click: findByLanguage('Cpp')">C++</a></li>
</ul>
Je suis attemping de réutiliser la fonction en appelant le paramètre de langue à partir de là. Mais si je passe d'une fonction avec la parenthèse sur les données-lier automatiquement appelé.
Comment puis-je y arriver?
Vous devez vous connecter pour publier un commentaire.
Vous pourriez être intéressé par une approche légèrement différente que d'ajouter des champs supplémentaires dans votre Modèle de Vue.
http://jsfiddle.net/jearles/RN9Dw/
En ajoutant
languages
dans le Modèle de Vue, vous pouvez utiliser knock-out pour rendre le menu et laclick
liaison va automatiquement passer à la langue que l'utilisateur a cliqué à la fonction de gestionnaire. En outre, l'ajout deselectedLanguage
comme un fait observable permet à l'books
calculée à changer lorsque vous activez ou désactivez une langue.HTML
JS
La meilleure façon d'y parvenir serait de conclure à une fonction qui s'exécute uniquement sur un clic, comme:
Alternativement, vous pouvez utiliser le contexte de liaison devrait faire l'affaire.
Voici un exemple de la cliquez sur la liaison à l'aide de JS Fiddle (http://jsfiddle.net/uFyaP/1/)
self.books = ko.observableArray(library);
dans lequel bibliothèque n'a pas été défini.Je sais que la question est ancienne, mais au cas où quelqu'un est intéressé, selon docs, le premier paramètre doit être un viewModel, alors qu'il fonctionne comme prévu.
.bind
invocation dans ma réponse originale à cette question.