2013-04-26 208 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可拖动的。