L'accès viewModel en fonction javascript à l'extérieur viewModel de la portée de l'
Je me demande si je peux accéder à la knockout.js principal viewModel à partir d'une méthode en dehors de la portée de ce dernier lui-même. Prenez cet exemple:
function Employee(data) {
var self = this;
ko.mapping.fromJS(data, {}, this);
}
function EmployeeViewModel() {
var self = this;
this.employees = ko.observableArray([]);
this.loadEmployees = function() {
var mappedEmployees= $.map(JSON.parse(data.value), function(item) { return new Employee(item) });
self.employees (mappedEmployees);
}
}
//here's the part I'm curious about
$(document).ready(function() {
ko.applyBindings(new EmployeeViewModel());
$("#myLink").click(function() {
//is there some way to get back into the ko context here?
//like with ko.dataFor or ko.contextFor?
});
}
Vous devez vous connecter pour publier un commentaire.
Vous pouvez toujours y accéder par le stockage de vos viewmodel dans une variable, vous pouvez accéder, le module et de révéler le module modèles sont gentils, mais vous pouvez simplement les stocker dans un objet qui n'entre pas en conflit avec d'autres noms ('mon' ici):
Vous avez eu la bonne idée, vous avez juste besoin de prendre l'élément comme un argument de votre cliquez sur la fonction et passer la propriété target ko.dataFor ou ko.contextFor (jsfiddle):
Au lieu d'utiliser jQuery pour lier l'événement de clic, vous pouvez toujours utiliser le knock-out cliquez sur la liaison, qui passe de l'actuel modèle de données en tant que premier paramètre et l'événement en tant que second paramètre (jsfiddle):
Dans votre html ($racine est votre base de modèle de vue, que vous n'avez pas besoin si votre clickedOnEmployee fonction de votre Employé objets):