2011-07-29 18 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モジュールとクラス名のデータとの打ち上げになりたいです。しかし、私は、実際の評価見ることができるものから: アクション:

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: 

は、視聴者を想定すると、以下の通りです:ツリーの初期化で

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

これが適切に解析され、私はラベルされたアイテムを取得しています。 'ビューア1で表示し、ビューワ2で表示する。しかし、 'View in viewer1'をクリックして、アクション関数が評価されると、詳細にViewers2モジュールとクラス名が含まれ、間違った起動が行われます。私は私の問題を適切に説明してくれることを望む。

今私はjsで始まっているので、おそらく私は何か基本的なものを逃しています。任意の提案をいただければ幸いです。

よろしく、 ボグダン

答えて

0

私はこの仕事をしたが、作成時にのみ評価されるパラメータを取得するためにevalを使用して[OK]をクリックします。したがって、私のソリューションは次のようになります:

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