1

サブスクライブされた変数のnewValueにアクセスできることはわかっていますが、その名前にアクセスするにはどうすればよいですか?

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"
    });
}
4

3 に答える 3

3

このようにしてみてください:

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");
}
于 2012-07-24T06:51:56.060 に答える
0

解決策として、ko.observableArray()の代わりに必要なプロパティを持つクラスを割り当てることができます。

たとえば、クラスがあります

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

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

その後、変更関数内で車のIDを取得します。

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

    });

}
于 2012-07-24T06:59:15.570 に答える
0

これはハックですが、以下のように、を介してサブスクライブされた変数の名前を取得しevent.srcElement、要素の「data-bind」属性の値を取得できます。

var id= $.trim(event.srcElement.attributes["data-bind"].value.split(':')[1])
于 2015-01-22T23:26:55.213 に答える