2012-07-27 3 views
0

내가 좋아하는 기본 놓기 이벤트 핸들러가 다음사용 마법 전자 확장 기능

function AdminDropHandler(){} 
//Extend the DropHandler 
extend(AdminDropHandler,DropHandler); 
//Override Drop method in AdminDropHandler 
AdminDropHandler.prototype.Drop=function(){ 
    DropHandler.prototype.Drop.apply(this,arguments); 
    var parent_id = e.target.id;// not defined error 
    ... 
} 

가이 기능을 확장 할 수

function Drop(e){ 
    e.preventDefault(); 
    var data=e.dataTransfer.getData("Text"); 
    var child = $('[target_id="'+data+'"]').get(0); 
    e.target.appendChild(child); 
} 
function DropHandler(){} 
DropHandler.prototype={ 
     ... 
    Drop : Drop 
} 

가 기본 드롭 핸들러를 새로운 객체를 생성 및 확장 DropHandler하지만 내가 사용하는 전자 잃을 것 같습니다. 이 문제를 해결하는 방법?

답변

2

함수에 e을 정의하지 않았습니다. 를 정의하십시오 :

AdminDropHandler.prototype.Drop = function(e) { 
    DropHandler.prototype.Drop.apply(this, arguments); 
    var parent_id = e.target.id; // should work now 
}; 
형식 매개 변수를 잘 작업 를 않기 때문에 그것을하지 않는 것이 좋습니다 있지만 또한,이 작업을 수행 할 수 있습니다

:

AdminDropHandler.prototype.Drop = function() { 
    var e = arguments[0]; 
    DropHandler.prototype.Drop.apply(this, arguments); 
    var parent_id = e.target.id; // should work now 
}; 
+0

가 그 DropHandler.prototype.Drop에 있지? 나는 그 안에 전자를 전달한다. DropHandler.prototype.Drop.apply (this, arguments)를 호출하면 더 넓어집니다. – panda

+0

@PandaYang'e'를 암시 적으로'arguments'를 통해 전달합니다. 함수 자체에는 정의되어 있지 않습니다. 당신은'var e = arguments [0];'또는 내가했던 것처럼 형식적인 매개 변수를 사용할 수 있습니다. 다른 함수를 호출하는 것은 호출 함수에서 변수를 정의하지 않습니다. – Esailija

+0

AdminDropHandler.Drop의 e가 인자가된다 [0] 맞습니까? – panda