2012-07-24 3 views
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" 
    }); 
} 

답변

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

    }); 

} 
0

이것은 해킹,하지만 당신은을 통해 가입 한 변수의 이름을 얻을 수 있습니다 event.srcElement과 같이 요소의 '데이터 바인딩'속성 값을 가져옵니다.

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