2011-07-29 1 views
2

그래서 다음과 같은 문제가 발생했습니다. 내 jstree를위한 메뉴를 만들어야 해. 그래서 :jstree 상황에 맞는 메뉴 동작 평가

   var default_dict = { 
           create: false, 
           rename: false, 
           remove: false, 
           ccp: false 
           };  
       for (one in viewers) { 
        var details = viewers[one]; 
        alert(details['module']); 
        alert(details['classname']);   
        default_dict[one] = {         
             label: 'View in: ' + one, 
             action: function (obj) { 

                doLaunch($project.id, nodeId, obj.one.module, obj.one.classname, obj.attr("dataType")) 
               }, 
             seperator_after: false, 
             seperator_before: false 
            } 
       } 
       return default_dict; 

지금이 내 메뉴 항목을 반환 내 createMenuItems 기능의 주요 부분이다. 지금은 확인했는데 모듈과 클래스 이름은 미세 있습니다

alert(details['module']); 
alert(details['classname']); 

그러나 당신이 볼 수 있듯이 나는 각 항목의 조치가 it.s correspondig 모듈과 클래스 명 데이터로 출시되고 싶어요. 조치 : : 그러나 내가 실제 평가를 볼 수있는에서이 제대로 구문 분석 트리 초기화에서

{ 'viewer1' : { 'module': 'Module_one', 'classname' : 'Classname_one' }, 'viewer2' : { 'module' : 'Module_two', 'classname' : 'Classname_two' } } 

나는 항목이 표시 얻을 :

function (obj) { 

doLaunch($project.id, nodeId, obj.one.module, obj.one.classname, obj.attr("dataType")) 
              }, is done after the initialization of the tree. So now I'm in the following situation: 

시청자 가정을 다음입니다 ' 뷰어 1에서보기 '및'뷰어 2에서보기 '. 그러나 '뷰어 1에서보기'를 클릭하고 동작 기능이 평가되면 이제 세부 정보에 Viewers2 모듈과 클래스 이름이 포함되어 잘못된 실행이 완료됩니다. 내 문제를 제대로 설명했으면 좋겠어.

이제는 js에서 시작되므로 어쩌면 기본 무언가를 놓칠 수 있습니다. 모든 제안을 부탁드립니다.

감사합니다, 보그

답변

0

내가이 작품을 만든하지만 작성시 평가 된 매개 변수를 얻기 위해 평가를 사용하여 확인. 그래서 내 솔루션은 다음과 같습니다 :

0

여기서 작업 기능에 대한 클로저를 사용할 수 있습니다. 예 :

action: function(obj) { 
    var one = obj.one;//this will save the obj instance, even if later the action function is called with the jsTree node obj 
    return function(){ 
    doLaunch(url, one.module, one.classname);//only this will get called 
    }; 
}(obj);//this will call your function on each item in for loop