0

我需要调用一个函数来更改dnd.source先前创建的接受。任何关于如何改变存在的想法dojo.dnd.source都会很棒。我用来创建的代码:

var catalog = new dojo.dnd.Source( 'div_catalog', { accept: ['inStock'] });

对不起我的英语,我还在学习。再次感谢。

4

3 回答 3

2

我玩过这个,我发现“接受”属性似乎不是 dojo 手册所建议的数组。它在 chrome 的调试器中显示为某种对象(数组除外),其中一个名为“text”的属性默认设置为 1。访问element.accept = "";以禁用它是有效的,但在那之后,就无法再使用相同的方法再次启用它并尝试类似element.accept = ['text'];我也尝试过访问它的方法element.accept.text,但一旦对象被实例化,这似乎也不起作用。

对于我的应用程序,我需要允许单个项目位于表中的每个 td 中,我使用以下函数来执行此操作,并使用此处列出的变体保留表中项目的顺序。我认为这值得一提。

function changeAccept(source)
{
    var element = document.getElementById(source.node.id);
    console.log("element:"+element);
    var element_father = element.parentNode;
    var td = document.createElement("td");
    td.setAttribute('id',element.id);
    element_father.replaceChild(td,element);

    var newsource = new dojo.dnd.Source(element.id, {accept: ['text']});

    dojo.connect(newsource, "onDrop", function(source, nodes, copy) {
        console.log("Dropped",  newsource, source, nodes, copy);
        newsource.accept = "";
        changeAccept(source);
    });

    return newsource;
}

var priorelement = new dojo.dnd.Source(element.id, {accept: ''}); //disabled
changeAccept(priorelement); //enabled and in same position in table
于 2011-11-16T03:41:15.910 回答
1

我面临同样的问题,我找到了解决方案。其实很简单:

var source = new dojo.dnd.Source("divId", { accept: [] }); // 我们也可以使用 dojo.dnd.AutoSource

现在创建的源不会接受任何东西。要更改接受,我们必须向它的接受字段添加一个属性,如下所示:

source.accept["acceptType"] = 1;

同样删除它:

delete source.accept["acceptType"];

我希望它会帮助某人。

于 2013-09-24T07:54:18.337 回答
0

我找到了另一种解决问题的方法,但效果不是很好。我只是删除了div包含的dnd.source并创建了一个dnd.source具有不同接受度的新的。我使用的代码:

var element = dojo.byId(user_id);<br />
var element_father = element.parentNode;<br />
element_father.removeChild(element);<br />
var div = document.createElement("div");<br />
div.setAttribute('id',element.id);<br />
element_father.appendChild(div);<br />          
var catalog = new dojo.dnd.Source(element.id, {accept: ['outStock']});

我希望有人知道如何设置现有的 dnd.source

于 2010-01-20T18:34:33.910 回答