2017-04-11 114 views
1

我有一個項目使用dijit/Treedijit/tree/dndSource,用戶可以通過拖放來移動樹項目進行更改。我在這裏使用的道場發佈1.10.4See的jsfiddle拖放完成時拖放N拖放事件

Dojo Tree w/drag and drop

我需要有一個通知時下降完成。這似乎是onDndDrop將是明顯的地方捕獲該事件,但該文件說,這不是一個好主意,混亂與此事件:

dojo/dnd documentation

從上面的文檔...

主題處理器

定義了以下話題監聽器:onDndSourceOver,onDndStart,onDndDrop,onDndCancel。這些主題由經理髮布。如果您想要覆蓋主題監聽器,請閱讀主題摘要。

Summary of topics

警告:在大多數情況下,你要使用的事件。主題是內部使用的低級構造,通常不應用於自定義。

末--------- ----------- DOC

那麼,如何才能得到當降完成,所以我可以更新對一些項目的通知服務器端使用ajax? onDndDrop事件可用dijit/tree/dndSource對象是我需要的,但文檔說不應該搞砸它。在我上面的jsfiddle示例中,我已經在tree對象創建中註釋掉//onDndDrop: treeDropEvt,。如果將此添加到樹的創建中,當用戶將樹項移動到樹中的另一個位置時會調用treeDropEvt,但在控制檯中可以看到錯誤,並且移動不會發生。

如果我必須使用onDndDrop事件,我該如何去創建它,所以我沒有收到任何錯誤,它的功能正常嗎?

回答

0

在發佈上述問題後,我找到了一個使用topic的解決方案。看到我更新的jsfiddle:

Monitor onDrop event using topic

添加"dojo/topic"require線。

topic.subscribe("/dnd/drop",treeDropEvt2);

function treeDropEvt2(source, nodes, copy, target) { 
    console.log('treeDropEvt2'); 
    console.dir(source); 
    console.dir(nodes); 
    console.dir(copy); 
    console.dir(target); 
} 

做出這些改變我的項目後,一切正常確定沒有錯誤,我現在能夠在掉落事件過程中做出的AJAX調用回服務器。請注意,此事件在放置開始時觸發,而不是在完成時觸發。

UPDATE

使用這種方法的下降期間火treeDropEvt2似乎是在下降的,而不是下降完成後的開始。不知道爲什麼獲得完成滴的通知是如此痛苦?非常沮喪..

1

我在TreeStoreModelpasteItem函數中做了你想做的事情。 TreeStoreModel是Dojo樹的存儲。

var memoryStore = new Memory({ 
      data: [{ 
       id: "root", 
       name: "ROOT", 
       loaded: true 
      }, ], 
      getChildren: function(object) { 
       return this.query({ 
        parent: object.id 
       }); 
      }, 
      clearOnClose:true 
     }); 

var myStore = new Observable(memoryStore); 

var myModel = new TreeStoreModel({ 
       store: myStore, 
       query: { 
        id: "root" 
       }, 
       labelAttr: "label", 
       pasteItem: function(child, oldParent, newParent, copy, insertIndex) { 
        // SEND NOTIFICATION, DO QUERIES 
       } 
      }); 

var tree = new Tree({ 
      model: myModel, 
      dndController: dndSource 
}); 
+0

謝謝Stefano,會檢查這一點..不'TreeStoreModel'棄用?將檢查是否有ObjectStoreModel的pasteItem? – GoinOff

+0

我真的不知道它是否被棄用。 'ObjectStoreModel'也有pasteItem,試試。 [Doc](https://dojotoolkit.org/reference-guide/1.10/dijit/tree/ObjectStoreModel.html) – Stefano