Как получить / установить принятие dojo.dnd.source

Мне нужно вызвать функцию, которая изменяет dnd.source Принятие ранее созданного. Любая идея, как изменить существующее dojo.dnd.source было бы здорово Код, который я использовал для создания:

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

извините за мой английский, я все еще учусь. Еще раз спасибо.

3 ответа

Я поэкспериментировал с этим и обнаружил, что свойство "accept" не является массивом, как предполагает руководство по додзё. Он отображается как некоторый объект (отличный от массива) в отладчике Chrome с атрибутом "текст", установленным в значение 1 по умолчанию. Доступ как element.accept = ""; отключить это работает, но после этого нет возврата к включению его снова, используя тот же метод и пытаясь что-то вроде element.accept = ['text']; Я также попытался получить доступ к нему по element.accept.text и это не сработало, как только объект был создан.

Для моего приложения мне нужно было разрешить одному элементу быть в каждом тд в таблице, и я использовал следующую функцию, чтобы сделать это и сохранить порядок элементов в таблице, используя вариант из перечисленных здесь. Я думал, что это стоит упомянуть.

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

Я столкнулся с той же проблемой, и я нашел решение. Это довольно легко на самом деле:

var source = new dojo.dnd.Source ("divId", {accept: []}); // Мы также можем использовать dojo.dnd.AutoSource

Теперь созданный источник не примет ничего. Чтобы изменить принятие, мы должны добавить свойство в поле принятия следующим образом:

source.accept["acceptType"] = 1;

И то же самое, чтобы удалить это:

delete source.accept["acceptType"];

Надеюсь, это кому-нибудь поможет.

Я нашел альтернативный способ решения проблемы, но он не так хорош. Я просто удалила 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

Другие вопросы по тегам