2011-03-07 5 views
0

JavaScript 함수를 jQuery의 이벤트 처리기와 함께 사용하려고하지만 정보가 하나 더 필요합니다. 데이터가있는 객체에 추가하려고 시도했지만 this을 사용했지만 this이 실행되면 null입니다. 나는 이것이 자바 스크립트에서 함수 복사와 관련이 있다고 생각한다. 추가 정보를 어떻게 전달할 수 있습니까? 크기 조정이 시도 될 때자바 스크립트 이벤트에 추가 인수 전달

<script type="text/javascript"> 
var WIDTH_ATTR = 'initWidth'; 

function resizeHandler(event, ui){ 
    var change = ui.size.width - this.master.attr(WIDTH_ATTR); 
    this.slave.width(slave.attr(WIDTH_ATTR) - change); 
}; 

function splitResize(master, slave, masterHandles){ 
    var s = new SharedResize(master, slave); 
    master.resizable({ handles: masterHandles, resize: s.resizeHandler }); 
} 

function SharedResize(master, slave){ 
    this.master = master; 
    this.slave = slave; 
    this.resizeHandler = resizeHandler; 
    master.attr(WIDTH_ATTR, master.width()); 
    slave.attr(WIDTH_ATTR, slave.width()); 
} 

// initialise plugins 
$(function(){ 
    try { 
     $('ul.sf-menu').superfish(); 
     splitResize($('#Content'), $('#InfoPanel')); 
    }catch(ex){ 
     alert(ex.message); 
    } 
}); 
</script> 

이 코드는

 
Line:13 
'this.master' is null or not an object. 

의 오류를 제공합니다.

이 구성표가 작동하도록 만들거나 이벤트 처리기를 내 데이터와 연결하는 다른 방법이있을 수 있습니다.

답변

1

이 변경 시도 : 그와

function splitResize(master, slave, masterHandles){ 
    var s = new SharedResize(master, slave); 
    master.resizable({ handles: masterHandles, 
     resize: function(event, ui) { s.resizeHandler(event, ui); } }); 
} 

을은 "크기 조정"핸들러는, 차례로, 적절한 컨텍스트 (이하 "SharedResize"예)와 핸들러를 호출하는 익명 함수 될 것입니다.

+0

감사합니다! 나는 당신의 종결을 조정해야했다. 그러나 그것은 나를 충분히 가깝게했다. 변경 사항을 반영하도록 답변을 업데이트했습니다. –

+0

오케이 좋은데 - 정확히 "여분의 매개 변수"가 무엇을 의미하는지 확신 할 수 없었습니다 :-) – Pointy

+0

내 원래의 목표는 크기 조절기에 직접'master'와'slave'를 전달하는 것이 었습니다. 클로저를 사용하여 어떻게 할 수 있는지 알지만 개체 버전은 이미 작성되어 있습니다. –

1

당신은 뾰족한 제안 또는 당신은 무엇을이 작업을 수행 할 수 있습니다 할 수 있습니다 : 작동

function SharedResize(master, slave){ 
    this.master = master; 
    this.slave = slave; 
    this.resizeHandler = function(event, ui){ 
     var change = ui.size.width - this.master.attr(WIDTH_ATTR); 
     this.slave.width(slave.attr(WIDTH_ATTR) - change); 
    }; 
    master.attr(WIDTH_ATTR, master.width()); 
    slave.attr(WIDTH_ATTR, slave.width()); 
}