我正在尝试使用Dojo dnd Source(1.4.2)来创建一个接口,我可以将一些对象从Source移动到Target。它工作正常,但我想改变行为以便在实际执行D& D之前执行检查,因此如果检查失败,则向用户显示错误消息,并且不进行D& D.我尝试过以下在博客中找到的示例:
dojo.subscribe("/dnd/drop", function(source,nodes,iscopy)
{
if (nodes[0].id == 'docs_menu'){
dojo.publish("/dnd/cancel");
dojo.dnd.manager().stopDrag();
alert("Drop is not permitted");
}
}
);
但它没有说this.avatar为null。有人知道怎么做吗?
感谢。
何
答案 0 :(得分:1)
执行此类检查的正确方法是覆盖checkAcceptance(source, nodes)
中的dojo.dnd.Source
功能。
var target = dojo.dnd.Source(node, {
checkAcceptance(source, nodes) : function() {
if (nodes[0].id == 'docs_menu') {
return false;
}
return this.inhertied(arguments);
}
});
有关详细信息,请参阅doc。
答案 1 :(得分:0)
我遇到了一个案例,其中我对列表中的项目顺序有所限制。有些项目必须先于其他项目。由于未在该阶段设置订单,因此无法在checkAcceptance阶段进行检查。我通过以下方式解决了这个问题。
on(mySource, "Drop", function(source, nodes, copy){
var invalid = false;
// ... run the checks to see if the new order is valid
// Keep the original order in a parameter named *data*
if(invalid == true) {
mySource.selectAll();
mySource.deleteSelectedNodes();
mySource.insertNodes(false, data);
}
else
{
// Have the data added
}
});