Sort(a,b) 在 Dojo.dnd.source 中不起作用
Posted
技术标签:
【中文标题】Sort(a,b) 在 Dojo.dnd.source 中不起作用【英文标题】:Sort(a,b) does not work in Dojo.dnd.source 【发布时间】:2014-12-17 16:02:04 【问题描述】:我尝试在用户将元素放在目标容器上后对数据进行排序,这是排序事件
......
var elements_container= dojo.dnd.Source("elements_container");
dojo.byId("elements_container").innerhtml = '';
... // add elements into container...
function sortDnD()
// actually full class name is ".element dojoDndItem" to query
dojo.query(".element", dojo.byId("elements_container")).sort(
function( a,b )
// fire bug debugging cursor skip this section
var divs_a = dojo.query('> div.sequence', a)
var diValue_a = divs_a[0].innerHTML;
var divs_b = dojo.query('> div.sequence', b)
var diValue_b = divs_b[0].innerHTML;
return (divs_a == divs_b ? 0 : (a.divs_a > b.divs_b ? 1 : -1));
).forEach(// fire bug debugging cursor move to this section
function(a, idx)
dojo.byId("element_container").insertBefore(a, dojo.byId("elements_container").childNodes[idx]);
);
dojo.byId("elements_container") 是 dojo dnd 源。我可以保证容器中有几个元素...
我正在使用dojo1.6,有趣的是当我通过firebug调试时,它看起来是
function( a,b )
....
从未执行过,也没有收到任何错误消息;调试光标在function( a,b )
之后移动到.forEach
,但.forEach
方法的主体运行没有任何问题。看起来排序函数根本没有响应。
更新
这是调用上述排序函数的代码
dojo.connect( source_container, "onDndDrop", function( source, nodes, copy, target )
nodes.forEach(function(node)
sortDnD();
);
);
更新2
我改变之后
dojo.query(".element", dojo.byId("elements_container")).sort(
到
dojo.query(".element", elements_container).sort(
道场给出:
TypeError: root.getElementsByClassName is not a function
...ag)var ret=_201(0,arr),te,x=0;var tret=root.getElementsByClassName(_235);while(...
这是elements_container
的dom数据
node: div#elements_container.container.dnd-list.dojoDndContainer.dojoDndSource.dojoDndTarget
childrenNodes: NodeList[div#dojoUnique23.element.dojoDndItem, div#dojoUnique24.element.dojoDndItem, .....
【问题讨论】:
你是如何调用 sortDnD() 的?我在您的代码中看不到对它的调用。 @Philippe 谢谢。更新帖子就好了,触发onDndDrop
事件监听是一个很简单的功能,可以通过fire运行bug没有问题
您的回调从未被执行的事实表明您的 dojo.query 调用返回一个空数组。你能把你在firebug中看到的dom结构贴上来吗?
@Philippe 根据您的要求再次更新,现在我有了一些新发现..
我认为你应该使用 dojo.query(".element.dojoDndItem", "elements_container").sort(...
【参考方案1】:
排序中的回调没有被调用的原因是你的查询选择器返回一个空数组(因此你没有什么可以排序的)。
请改用以下内容:
dojo.query(".element.dojoDndItem", "elements_container").sort(
请注意,最初您的选择器是“.element .dojoDndItem”,这意味着“查找所有具有类 dojoDndItem 的节点,它们是具有类元素的节点的子节点”。这里两个类都在同一个节点,所以需要去掉空格,让选择器为“.element.dojoDndItem”。
【讨论】:
以上是关于Sort(a,b) 在 Dojo.dnd.source 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Sort(a,b) 在 Dojo.dnd.source 中不起作用