0

MootoolsFx.Sortに問題があります。

<ul id="list">
   <li>One</li>
   <li>Two</li>
</ul>

Javascript:

mySort = new Fx.Sort($$('ul#list>li'));

リストにさらに要素を追加できます。

$('list').adopt(new Element('li', { text: 'Three' }));

ただし、実行時に作成されたリスト要素は、明らかにFx.Sortインスタンスによって考慮されず、他の要素と一緒に並べ替えることはできません。

それらを既存のFx.Sortに追加する方法はありますか?mySortまたは、実行時に要素を追加するたびに新しいインスタンスに置き換えるだけですか?

4

2 に答える 2

1

インスタンスを見るとFx.Sort、必要に応じて変更できる属性がいくつかあります。

console.log(new Fx.Sort($$('ul#list>li'));

これは私がそれを行う方法です(テストされていません):

var mySort = new Fx.Sort($$('ul#list>li'));
var newElement = new Element('li', { text: 'Three' });
$('list').adopt(newElement);
mySort.elements.include(newElement);
mySort.subjects.include(newElement);

// Order of elements
var orderSize = mySort.currentOrder.length;
mySort.currentOrder[orderSize] = orderSize;

ただし、Mootools More FX.Sort の内部機構を変更しているため、動作しない場合があります。

于 2012-01-18T22:04:16.510 に答える
1

右 - Fx.Sort の実装との互換性を維持し、必要に応じて並べ替えを維持するのは難しいです。クリックされた項目のいずれかが一番上に移動してから展開される実際の例を次に示します。

http://jsfiddle.net/dimitar/FcN32/

あなたに固有:

Fx.Sort.implement({

    adopt: function(el, pos) {
        if (!this.element)
            this.element = this.elements[0] && this.elements[0].getParent();

        var len = this.currentOrder.length;
        pos = (pos !== null && typeof pos === 'number')
            ? this.currentOrder.contains(pos) ? pos : len
            : len;


        this.elements.include(el);
        if (pos === len) {
            // don't care, attach to bottom.
            el.inject(this.element);
            this.currentOrder.push(this.elements.indexOf(el));
        }
        else {
            // we are injecting at a particular place in the order
            el.inject(this.elements[pos], "before");
            var newOrder = this.currentOrder.slice(0, pos) || [];
            newOrder.push(this.elements.indexOf(el));
            this.currentOrder = newOrder.combine(this.currentOrder.slice(pos));
        }
        if (el.getStyle('position') == 'static') el.setStyle('position', 'relative');                              
        this.rearrangeDOM();
    }

});

instance.adopt(someel, <optional pos>)これは、 pos がリスト内の数値位置である場合のように呼び出されています。省略した場合は末尾に追加されます。それが役に立てば幸い...

于 2012-01-19T10:18:16.903 に答える