如何在不同的场景中使用dojo dnd

时间:2013-07-01 22:44:04

标签: javascript dojo drag-and-drop

我正在努力处理dojo的文档和在线信息,以获得我需要的解决方案,希望得到你的帮助。

我正在从网格到源或目标实现DND:

new dojox.grid.enhanced.plugins.GridSource(dojo.byId("songForm"), {
                    isSource: false,
                    insertNodesForGrid: false
                });

但是我没有在该目标中插入任何内容我正在使用onDropGridRows列表器来创建我自己的值,这是一个按钮并将其插入另一个具有正常dnd激活(calpanel)的div中:< / p>

   dojo.connect(formTarget, "onDropGridRows", lang.hitch(this,function (grid, rowIndexes) {

   var s = grid.store,
                        row = rowIndexes[0];

                    // html.set(dom.byId("calPanel"), "<div id='calButton_" + s.getValue(grid.getItem(row), "elementid") + "'></div>");
                    // domConstruct.place("<div id='calButton_" + s.getValue(grid.getItem(row), "elementid") + "'></div>", "ElementsCalculator", "last");
                    new dijit.form.Button({
                        label: s.getValue(grid.getItem(row), "pagename") + ":" + s.getValue(grid.getItem(row), "col") + ":" + s.getValue(grid.getItem(row), "row"),
                        class: 'dojoDndItem',
                        onClick: function () {

                        }
                    }).placeAt("calPanel");
                    if (source != null) {
                          source.destroy();
                    }

                    source = new dojo.dnd.Source("calPanel", {
                        copyOnly: false
                    });
    }

我面临的两个问题是:

1)songForm面板应该只是一个来自网格的目标,它也是作为常规dnd源的目标运行的,我怎么能阻止它发生呢?

2)我实现的监听器如下所示正在监听任何DND操作,而不仅仅是我提供的节点你知道为什么吗?

  dojo.connect(source, "onDndDrop", lang.hitch(this,function (grid, rowIndexes) {}

1 个答案:

答案 0 :(得分:0)

基于我之前评论的一个例子......

checkAcceptance: function (source, nodes) {
    if (source intanceof yourGridClass) {   
        return true;
    }

    // You may need to use this.inherited(arguments) here
    return false;
}

checkAcceptance会包含在您的songForm代码中。

对于你的第二个问题,我发现情况也是如此。我不知道为什么会这样,但使用checkAcceptancecheckItemAcceptance来处理很容易。 checkItemAcceptancecheckAcceptance类似。不同之处在于您已经确定目标可以接受来自源的内容,但现在您正在检查是否可以接受您正在丢弃的特定项目。

我希望这会有所帮助。