2009-06-06 11 views
4

ExtJS 라이브러리가 포함 된 프로젝트에서 작업 중이며 이해가되지 않는 코드 조각이 있습니다 (그러나 작동합니다). :(도와주세요. 자바 스크립트 함수 매개 변수

TreePanel.on('click', showDocumentFromTree); 
function showDocumentFromTree(node) { 
    if (TreePanel.getSelectionModel().isSelected(node)) { 
     dataStore.baseParams = { 
      node : node.id, 
      limit : 10 
     } 
     dataStore.load({ 
      params : { 
       start : 0 
      } 
     }); 
    } 
}; 

그래서 "showDocumentFromTree"에 대한 기능 정의는 "노드"하지만 코드를 호출 할 때, 그것은 아무것도 통과하지 못한라는 매개 변수가 있습니다. 또한, 오브젝트 "노드는"아니다 글로벌 (내가 아는 한).

그래서 내가 작품을 방법에 대한 혼란 스러워요?이 자바 스크립트가 또?

을 가지고 마법,인가 나는 "노드"를 인쇄 할 console.debug을 수행 할 때 그 안에 물건이 있습니다. (FireBug 용 console.debug)

감사합니다. J

+1

이 줄이 있다고 생각한다면 : TreePanel.on ('click', showDocumentFromTree); showDocumentFromTree (여기서 추측하고있는 함수)를 호출하면 잘못된 것입니다. 그것은 단지 어떤 시점에서 호출 될 함수를 등록 만합니다. – airportyh

+0

jQuery에서 지배적 인 것으로 보이는 항목에서 Extj를 사용하는 경우 +1. :) –

답변

0

이 경우 showDocumentFromTree의 매개 변수는 사용자가 작업이 첨부 된 요소를 클릭 할 때 브라우저가 제공하는 마법 매개 변수입니다. 이 경우 nodeTreePanel을 나타냅니다. Javascript - The this keyword이 메커니즘에 대해 자세히 설명합니다. 예제에서와 같이 node보다 매개 변수 이름 this을 사용하는 것이 더 일반적 일 수 있습니다.

+3

나는 이것이 정말로 옳다고 생각하지 않는다. "this"는 형식적인 매개 변수가 아닙니다 (예 : "노드"가 여기에 있습니다). 함수의 환경의 일부입니다. 이 경우 extJS는 내부적으로 "on"함수에서 전달 된 사용자 제공 함수를 호출하는 클릭 핸들러를 등록하고이를 전달합니다. 예 : userProvidedFunction (this). 그런 다음 "노드"는 "this"값을 보유합니다. –

8

코드가하고있는`TreePanel.on이 '(showDocumentFromTree를'클릭 ')가 showDocumentFromTree를 호출하지되어 , 그것의 인수로 함수 showDocumentFromTree를 전달합니다. 그런 다음 onclick 이벤트 핸들러에 의해 나중에 호출 될 것이고, 그 노드 인수가 전달됩니다.

+0

빙고. 질문자가 "코드에 대한 참조"라는 개념을 이해하고 있는지 확인하십시오. 일부 데이터를 통해 "명령 포인터"를 재설정하는 또 다른 방법. – Roboprog

4

첫 번째 줄은 showDocumentFromTree 함수를 click 이벤트에 바인딩합니다. TreePanel.on에 전달 된 내용은 호출 자체가 아닌 showDocumentFromTree 함수에 대한 참조입니다.

이벤트가 발생하면 트리거하는 객체를 첫 번째 매개 변수로 사용하여 바인딩 된 함수가 호출됩니다. 이 경우 클릭 한 DOM 노드가됩니다.

는 설명하기 는, 첫 번째 줄에 다시 쓸 수 있습니다

TreePanel.on('click', function(node) { 
    showDocumentFromTree(node); 
}); 

OK, 어쩌면이 훨씬 명확하지 않지만 당신은 실제로 on 방법에 인수로 함수를 전달하는 참조가 아닌 수 메서드 자체를 호출합니다.

1

TreePanel은 Extjs의 클래스/구성 요소입니다. 첫 줄에 :

TreePanel.on ('click', showDocumentFromTree);

click 처리기를 TreePanel 클래스에 할당합니다. 즉, TreePanel을 클릭 할 때마다 showDocumentFromTree 함수가 호출됩니다. TreePanel에 대한 Click 이벤트의 일부는 시작된 "TreeNode"또는 클릭 이벤트를 "유발 한"항목을 전달하는 것입니다.

Ext.tree.TreeEventModel 클래스 특히 initEvents, delegateClickonNodeClick 기능을 보면,이 기능의 작동 방식을 참조하십시오.

0

다른 포스터가 함수에 인수를 제공하는 브라우저에 관해 언급 한 내용을 반복하면서 JavaScript로 언어에 대한 일반적인 사항을 작성하려고했습니다. JavaScript는 C++ 및 Java와 달리 함수 시그니처에 정의 된 매개 변수를 사용하지 않습니다. 그런 다음 아래 어떤 방식으로 호출

function doSomething(myParam){ 
    ... Does Some Stuff 
} 

: 이것은 당신이 같은 기능을 할 수 있습니다 의미

이이 서명에 정의 된 매개 변수없이 호출되면 ..

doSomething(); 

doSomething(foo); 

doSomething(foo, bar); 

doSomething(foo, bar, baz); 

등의 누락 된 매개 변수는 정의되지 않습니다. 추가 매개 변수는 모든 함수에있는 args 배열에서만 액세스 할 수 있습니다.

귀하의 질문에 구체적이지는 않겠지 만 문맥과 일반적 관심사에 좋을 것이라고 생각했습니다.