foobar2000 뮤직 플레이어 용 WSH 구성 요소에 jscript 인터페이스를 구축하려고합니다.
어느 시점에서, 나는 동일한 함수를 호출하지만 다른 인수를 사용하는 다양한 수의 버튼을 만들어야합니다. 루프는이고 배열은 인 을 사용하여 단추를 만들 수 있습니다. 그러나 모든 단추는 마지막 단추의 인수 만 전달합니다. 여기 다른 인수를 사용하여 함수를 호출하는 동적 단추를 만드는 방법
for (var i=0; i<_groupsArray.length; i++) {
_btn = _groupsArray[i];
ƒview.addButton(_btn, _img, function() {setView(_btn)}, function() {doPlay(_btn)});
}
을 _btn 내가 (버튼을 클릭 할 때 함수에 전달하려는 버튼의 라벨과 인수로 모두 사용된다 아티스트 이름 또는 앨범 제목 또는 이와 유사한 것입니다). ƒview은 단추를 보유하는 사용자 지정 개체입니다. 버튼의 위치를 지정할 필요가 없도록 버튼을 만들었습니다. ƒview은 필요할 때마다 그들을 계산합니다.
이것은 실제로 버튼을 생성하는 addButton 메서드의 일부입니다 (나머지는 레이아웃을 계산합니다). 각 액션 인수는, addButton 메소드에 의한 처리를 실시하지 않고, 작성 중의 버튼에 파라미터로서 건네받습니다.
this.addButton = function(label, img, action1, action2, action3, action4, action5) {
...
new ButtonObject(label, __x, __y, __w, __h, action1, action2, action3, action4, action5);
마지막으로, 난 내 buttonObject 생성자이 있습니다
function ButtonObject(label, x, y, w, h, action1, action2, action3, action4, action5) {
...
this.action1 = action1;
this.action2 = action2;
this.action3 = action3;
this.action4 = action4;
this.action5 = action5;
...
this.act1 = function() {
var __doIt = function() {this.action1();};
return __doIt;
}
루프에 대한 동안 전달 된 함수는 마지막 조치 1, 조치 2 ... 속성과 객체에 저장됩니다.
내가 직접 this.action1()를 호출을 포함, ACT1 방법으로 조치 1 를 호출하는 여러 가지 방법을 시도; this.action1.apply(); 당신이 위에서 보는 것처럼 clausure를 형성하려합니다. 올바른 동작을 호출하지만 마지막 단추의 인수를 사용하면 충돌이 발생하거나 아무 효과가 없습니다.
나는 이제 시도 할 생각이 없습니다. 함수와 인수를 별도로 전달하는 부분적인 성공이 있었지만 이는 추악한 속임수입니다. clausures에 대한 많은 튜토리얼을 읽었고 로컬 변수를 유지하는 방법을 설명했지만이 경우에는 해당 변수를 관리 할 수 없었습니다. 나는 내가 계속 어떻게
var __doIt = function() {this.action1();};
그래서 라인을 가리키는 "이 개체가이 속성 또는 메서드를 처리하지 않습니다"로 버튼을 클릭하면 내 마지막 시도는 (당신이 코드에서 볼 수 있듯이) 충돌합니다 각 버튼 내에 "살아있다"는 주장이 있습니까? 당신은 다만 그것을 결합, _btn의 가치를 개최 클로저를 만들 필요가
for (var i=0; i<_groupsArray.length; i++) {
_btn = _groupsArray[i];
ƒview.addButton(_btn, _img,
function(b) {return function() {setView(b)};}(_btn),
function(b) {return function() {doPlay(b)};}(_btn)
);
}
: 같은
이것은 [Javascript closure inside loops] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) 문제와 유사합니다. –