2013-04-26 207 views
0

我動態創建一些應該可以放到JSTree組件上的元素。樹已配置並且拖動進程正在工作,但它不能像預期的那樣工作。jsTree拖動項目解體

把這個HTML片段:

<div id="newDragEntry_1" class="newDragEntry"> 
    <div class="floatLeft"> 
    <span class="newEntryThumbtab">#</span> 
    <span class="newEntryLabel">asdfasdf</span> 
    </div> 
    <div class="floatRight"> 
    <span class="newEntryFilename">(LICENSE)</span> 
    <span id="newEntryIcon_1" class="newEntryIcon"> 
     <img src="/img/lib/icons/mime/pdf.png"> 
    </span> 
    </div> 
</div> 

分配一類「newDragEntry」的div容器 - 而這正是jsTree被配置爲識別。問題是用戶在啓動拖動時碰巧抓住的任何內部元素都會成爲實際的拖動對象。所以,如果他們抓住文本「許可證」,那麼這就是獲得幻影和拖動 - 而不是整個#newDragEntry_1元素(它只是在樣式化時類似於按鈕)。

任何人有任何想法嗎?

(FWIW - 我可以拖拽行爲,我直接利用JQ的.draggable()方法尋找,但我似乎並沒有得到通過jstree解僱任何丟棄事件?)

回答

0

後一堆挖掘我得出這樣的結論:解決這個問題需要在jsTree中修改代碼庫或手動事件跟蹤的健康劑量(即,您自己的疊加拖動邏輯)。

如果有人發現他們在這裏尋找一個分辨率,開始的地方是jstree源代碼的這個剪輯(版本:jsTree 1.0-rc3):

var s = this._get_settings().dnd; 
if(s.drag_target) { 
    $(document) 
    .delegate(s.drag_target, "mousedown.jstree-" + this.get_index(), $.proxy(function (e) { 
    o = e.target; 
    $.vakata.dnd.drag_start(e, { jstree : true, obj : e.target }, "<ins class='jstree-icon'></ins>" + $(e.target).text()); 

最後一行是重要的一行。最後你會看到它從冒泡的拖動事件創建者中提取了TEXT - 因此像上面我的例子那樣,組合的分解。這意味着任何格式化的格式都將被排除在幽靈助手之外(等等)。

我的解決方案:確實不是很優雅,但我必須重做拖動源的組合,以便只有較小的基於文本的部分纔是jstree可拖動的。