2012-11-28 55 views
3

我正在使用DynaTree JavaScript樹並進行了修改。具體而言,我試圖根據節點的類型添加多個上下文菜單。任何人都可以解釋這一行的JavaScript?

基本上我的想法是讓上下文菜單向我的MVC(2)控制器發出一個ajax請求,並將它作爲JSON傳遞,它將用於創建一個可以在c#中訪問的類。

我已經得到這個工作好了,經過了約500個職位在這裏!現在我需要再次修改JS以便根據類型選擇合適的上下文菜單。

我的列表看起來像

<div id="tree"> 
    <ul> 

     <li id="'ID':1,'TYPE':1" title="Look: a tool tip!">item1 with key and tooltip</li> 
     <li id="'ID':2,'TYPE':2" class="activate">item2: activated on init</li> 
     <li id="'ID':3,'TYPE':3" class="folder">Folder with some children 
     <ul> 
      <li id="'ID':4,'TYPE':1">Sub-item 3.1</li> 
      <li id="'ID':5,'TYPE':1">Sub-item 3.2</li> 
     </ul> 
     </li> 
     <li id="'ID':6,'TYPE':1" class="expanded">Document with some children (expanded on init) 
     <ul> 
      <li id="'ID':7,'TYPE':1'">Sub-item 4.1</li> 
      <li id="'ID':8,'TYPE':1'">Sub-item 4.2</li> 
     </ul> 
     </li> 
     <li id="'ID':9,'TYPE':1" class="lazy folder">Lazy folder</li> 
    </ul> 
    </div> 

而且我返回ID,並使用jQuery.parseJSON發送到MVC。

的JS我不明白是在這裏:

function bindContextMenu(span) { 
    // Add context menu to this node: 
    debugger; 

    $(span).contextMenu({ menu: "myMenu1" }, function (action, el, pos) { 
     var node = $.ui.dynatree.getNode(el).toString(); 
     node = node.replace(/'/g, '\"'); 
     node = jQuery.parseJSON('{' + node + '}'); 

     $.ajax({ 
     type: "POST", 
     url: "/TreeView/Click/", 
     data: { ID: node.ID, TYPE: node.TYPE }, 
     error: function (request) { $("#message").html("error"); }, 
     success: function (result) { $("#message").html("Success - " + result); } 
     }) 
    }); 
    }; 

此行 - $(跨度).contextMenu({菜單: 「myMenu1」},功能(作用,EL,POS){

似乎都設置文本菜單,並觸發點擊右鍵菜單的時候,我會很高興,如果有人可以只爲谷歌一些關鍵字,因爲我沒有一個線索。

在此先感謝

+0

另一方面:我不是100%清楚你打算在這裏做什麼,但似乎你說每次用戶點擊這些樹項目之一,你會去做一個AJAX調用來獲取該項目的上下文菜單?除非您真的需要爲每個項目設置不同的上下文菜單,否則我會在頁面中嵌入上下文菜單的代碼,並使用一些粘貼javascript來顯示它;否則用戶每次嘗試執行普通的UI操作時都會等待您的服務器 - 打開上下文菜單;更不用說服務器上的負載了。 – bloopletech

+0

嗨bloopletech,對不起,我不清楚。上下文菜單保存在三個硬編碼的列表中。 ajax部分可以在與上下文相關的幕後執行數據庫類型的事情 - IE刪除上下文單擊會去並刪除一些東西。 – DavidB

+0

但基本上我的問題是:$(span).contextMenu({menu:「myMenu1」},function(action,el,pos){關鍵字函數出現時沒有給出函數名稱。 ,這是什麼,我Google是什麼? – DavidB

回答

3

.contextMenu看起來像一個插件,但不知道確切的插件是很難給出明確的答案。但是它看起來像初始化該插件需要兩個參數:

  1. object包含任何設置參數 - 這是一個插件
  2. 當菜單被激活(可能),它被調用的函數相當標準。
+0

謝謝Jamie,我被Dyna樹包裹了,我忘記了它使用了另外一個插件。現在就看看這個。出於興趣,有人說這可能是一個javascript關閉,這是否值得谷歌或是它錯的方向。 – DavidB

+0

@DavidBattersby這不是一個閉包,但是你可能想把它作爲一個有用的知識;) – Jamiec

+1

你在看什麼(一個沒有名字的函數)是一個'匿名函數'。下面是關於javascript函數(和閉包)的一個很好的詳細答案:http://stackoverflow.com/questions/1140089/how-does-an-anonymous-function-in-javascript-work – Jamiec

相關問題