2012-07-24 5 views
1

Je sais que je peux accéder au nouvelleValeur de la variable souscrite, mais comment puis-je accéder au nom de celui-ci:Accès « nom » de la variable souscrite ko s'abonner méthode

for (var i = 0; i < carSelects.length; i++) { 
    var carId = $(carSelects[i]).attr('carId'); 
    self["cars_" + carId + "_selected"] = ko.observableArray(); 
    self["cars_" + carId + "_selected"].subscribe(function(newValue) { 
     // here i want to access the name of the subsribed variable 
     // i.e. "cars_" + carId + "_selected" 
    }); 
} 

Répondre

3

Essayez comme ceci:

for (var i = 0; i < carSelects.length; i++) { 
    var carId = $(carSelects[i]).attr('carId'); 
    (function(name){ 
     self[name] = ko.observableArray(); 
     self[name].subscribe(function(newValue) { 
      alert(name); 
     }); 
    })("cars_" + carId + "_selected"); 
} 
0

Comme solution, vous pouvez assigner la classe avec des propriétés nécessaires au lieu de ko.observableArray();

Par exemple, vous avez la classe

function CarClass(carId, changeCallback) { 
    this.carId = carId; 
    this.array = ko.observableArray(); 
    var self = this; 

    self.array..subscribe(function(newValue) { 
     changeCallback(self.carId, newValue); 
    }); 
} 

Et après avoir id voiture en fonction de changement:

for (var i = 0; i < carSelects.length; i++) { 
    var carId = $(carSelects[i]).attr('carId'); 
    self["cars_" + carId + "_selected"] = new CarClass(carId, function(carId, newValue) { 

    }); 

} 
0

C'est un hack, mais vous pouvez obtenir le nom de la variable souscrite par le event.srcElement et obtenir la valeur de l'attribut "data-bind" de l'élément, comme ci-dessous:

var id= $.trim(event.srcElement.attributes["data-bind"].value.split(':')[1]) 
Questions connexes