0

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

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

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

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

   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) {}
4

1 回答 1

0

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

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

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

checkAcceptance会进入你的songForm代码。

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

我希望这有帮助。

于 2013-07-02T12:18:04.670 回答