script.aculuo.us#Sortable

ダイナミックに項目を追加削除するとうまくいかないなー

…えいっ

Sortable.add_item = function (id, item) {
	var opts = Sortable.options($(id));
	
	opts.draggables.push(
		new Draggable(item, {
			revert:     true,
			scroll:     opts.scroll,
			delay:      opts.delay,
			ghosting:   opts.ghosting,
			constraint: opts.constraint,
			handle:
			    opts.handle ? item.down('.' + opts.handle, 0)
			  :               item,
		})
	);
	
	Droppables.add(item, {
		overlap:     opts.overlap,
		containment: opts.containment,
		tree:        opts.tree,
		hoverclass:  opts.hoverclass,
		onHover:     Sortable.onHover,
	});
	
	opts.droppables.push(item);
};

Sortable.remove_item = function (id, item) {
	var opts = Sortable.options($(id));
	
	idx = -1;
	opts.droppables.each(function (e, index) {
		if (e == item) {
			Droppables.remove(e);
			idx = index;
		}
	});
	if (idx >= 0)
		opts.droppables.splice(idx, 1);
	
	idx = -1;
	opts.draggables.each(function (e, index) {
		if (e.element == item) {
			e.destroy();
			idx = index;
		}
	});
	if (idx >= 0)
		opts.draggables.splice(idx, 1);
};

Draggable 等を作る処理が Sortable.create() の中にしかなかったのでコピペまくりでかっこわるいし拡張性ないです。

で,Sortable の Wiki を読んでたら,Behaviour.js とか使って Sortable を再生成してる人がいますよ…それメモリリークとか大丈夫なん?

var Sortable = {
    ...
  create: function(element) {
    ...
    // clear any old sortable with same element
    this.destroy(element);

ガーン

無駄な一日を過ごしてしまいました。