繁体   English   中英

脚本排序的onUpdate不触发

[英]Scriptaculous Sortable onUpdate not firing

我在使用来自脚本库的Sortable类时遇到了一些麻烦:如果我使用only属性,似乎永远不会调用onUpdate回调。 这是一个不使用'only'属性的工作示例:

<ul id="test">
  <li id="item_1" class="level0">
    item 1
    <ul>
      <li id="item_2" class="level1">item 1.1</li>
      <li id="item_3" class="level1">item 1.2</li>
    </ul>
  </li>
  <li id="item_4" class="level0">
    item 2
    <ul>
      <li id="item_5" class="level1">item 2.1</li>
      <li id="item_6" class="level1">item 2.2</li>
    </ul>
  </li>
</ul>
<script type="text/javascript">
  Sortable.create("test", {
    tree: true,
    onUpdate: function(item) { alert(item.readAttribute("id")) },
  });
</script>

这段代码运行良好: onUpdate被正确调用,但是现在,如果我将Sortable.create()更改为only添加属性,如下所示,就不再调用onUpdate了:

Sortable.create("test", {
  tree: true,
  only: 'level1',
  onUpdate: function(item) { alert(item.readAttribute("id")) },
});

有人已经解决了这个问题吗? 谢谢

在一些调试后dragdrop.js源代码,我终于发现了用来检测树的修改仅限于根元素序列化方法(但我没有调查为什么它是不OK only属性)。

基于dragdrop.js 1.9.0版,我可以通过修补dragdrop.js来修复它。 我发现了几种修补代码的方法:

  1. 通过修改serialize方法:该方法创建一个options对象,但除了测试options.tree以外,不使用它。 传递给Sortable.tree的选项是arguments[1] ,我想这是一个错误。 第一种修补方法是用options (第936和940行)替换arguments[1]

     929 serialize: function(element) { 930 element = $(element); 931 var options = Object.extend(Sortable.options(element), arguments[1] || { }); 932 var name = encodeURIComponent( 933 (arguments[1] && arguments[1].name) ? arguments[1].name : element.id); 934 935 if (options.tree) { 936 return Sortable.tree(element, options).children.map( function (item) { 937 return [name + Sortable._constructIndex(item) + "[id]=" + encodeURIComponent(item.id)].concat(item.children.map(arguments.callee)); 938 }).flatten().join('&'); 939 } else { 940 return Sortable.sequence(element, options).map( function(item) { 941 return name + "[]=" + encodeURIComponent(item); 942 }).join('&'); 943 } 944 } 
  2. 第二种方法是手动添加options.tree值。 可以使用以下tree方法(第877行和“ NEW”行)完成此操作:

     872 var options = Object.extend({ 873 tag: sortableOptions.tag, 874 treeTag: sortableOptions.treeTag, 875 only: sortableOptions.only, 876 name: element.id, 877 format: sortableOptions.format, NEW tree: sortableOptions.tree 878 }, arguments[1] || { }); 

还可以修复findElements方法以更改options.tree ? true : false options.tree ? true : false进入options.treeTag ? true : false options.treeTag ? true : false因为从来没有设置options.tree ,所以原始测试将始终返回false ,但是我不确定有副作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM