2012-01-13 2 views
0

Я пытаюсь удалить элемент из сортируемого списка mootools, а затем сериализует и сохраняет новый список.удаление элемента из mootools sortable

Я хотел бы использовать немного леденца, а не прямую destroy() на элементе. Я построил скрипку здесь: http://jsfiddle.net/kBAqJ/4/

Обратите внимание на order1 и order2 vars. Это содержит сериализованный элемент до и после удаления элемента. Если вы используете метод destroy, чтобы избавиться от элемента после его удаления из сортируемого, вы получите правильное значение для order2, например. 4.

Если вы используете nix(true) вместо destroy, вы получите 5 в качестве значения order1 и order2, даже несмотря на то, что документы говорят nix(true) звонки destroy после dissolve.

Это ошибка в Mootools, или я чего-то не хватает? Есть ли другой способ добавить эффект dissolve при использовании destroy, который даст правильный результат?

window.addEvent('domready', function(){ 

    var mySort = new Sortables('#example2 UL', { 
     clone: true, 
     revert: true, 
     opacity: 0.7 
    }); 

    console.log (mySort.elements.length); 
    var order1 = mySort.serialize(0); 
    console.dir(order1); 

    mySort.removeItems($('item1')).destroy(); // this results in the correct value in the order2 var below 
    //mySort.removeItems($('item1')).nix({duration: 1000}, true); // this results in the wrong value for order2 

    console.log (mySort.elements.length); 
    var order2 = mySort.serialize(0); 
    console.dir(order2); 

}); 

ответ

0

я не думаю, что вы найдете какой-либо эффект или путь, который уничтожит элемент и еще показывать его на странице;) Так что это не Moo инструменты ошибка

функция

сериализации является используя дочерние элементы списка (т. е. блоки <li>) для создания массива.

Я бы сказал, что самый простой способ будет избавиться от их обращений в сериализованном массиве:

window.addEvent('domready', function(){ 

    var mySort = new Sortables('#example2 UL', { 
     clone: true, 
     revert: true, 
     opacity: 0.7 
    }); 

    console.log (mySort.elements.length); 
    var order1 = mySort.serialize(0); 
    console.dir(order1); 

    //mySort.removeItems($('item1')).destroy(); // this results in the correct value in the order2 var below 
    mySort.removeItems($('item1')).nix({duration: 1000}, true); // this results in the wrong value for order2 

    console.log (mySort.elements.length); 
    var order2 = mySort.serialize(0).erase("item1"); // we have to erase the item because he may still be in the list of children at this time… 
    console.dir(order2); 

}); 

Приветствий

+0

@ romain-- спасибо, но вопрос заключается в том, что 'destroy' работает ожидается, в то время как 'nix' не ... - mootools docs говорят, что' nix' вызывает destroy ПОСЛЕ того, как он растворяет эффект, поэтому можно было бы ожидать, что он будет работать так же, как прямой 'destroy', не так ли? – julio

+0

@julio - проблема в том, что вы вызываете сериализацию до того, как происходит разрушение. nix делает эффект, а затем уничтожает. в вашем примере запускается nix, требуется 10000 мс для завершения, сериализация происходит во время этой задержки, а затем уничтожается называется ... Я не вижу ошибки mootools, это ожидаемый результат для меня ... – Romain

Смежные вопросы