1

データベース エントリのリストを並べ替えてから、Joomla で新しい順序でデータベースを更新しようとしています。

これまでのところ、エントリの ID と順序を追跡するために2 つが隠されているmootoolsSortablesリストがあります。現時点では、順序変数は変更されず、元の順序が反映されます。<li><input>

送信イベントをキャプチャし、注文変数を現在の状態に変更してからリクエストを送信したいと思っていましたが、これを行う方法がわかりません...

私は持っている:

<li style="float:left">
    <input type="hidden" name="o<?php echo $row->order; ?>" value="<?php echo $i; ?>" />
    <input type="hidden" name="i<?php echo $row->order; ?>" value="<?php echo $row->lotid; ?>" />
    Lot <?php echo $row->lot_name; ?><br />
    <?php echo $row->address; ?>
</li>

と:

window.addEvent('domready', function(){
    new Sortables('#order-grid', {opacity: 0.7});

    form = document.id('adminForm');
    list = document.id('order-grid');

    form.addEvent('submit', function(e) {
        var sortOrder = [];

        list.getElements('li').each(function(li) {
            sortOrder.push(li.retrieve... //Stuck!
        });
    });
});

どんな助けでも感謝します。

4

1 に答える 1

2

ドキュメントページはあなたの友達です。http://mootools.net/docs/more/Drag/Sortables

まず、参照を保存します。

var sortables = new Sortables(options)

次に、このsortables.serialize()メソッドを使用して新しい注文を取得できます。デフォルトでは、シリアル化は要素IDを返しますが、関数である引数を取るため、好きなものを返すことができます。

例えば。新しい並べ替え順序の配列を取得するには、次のようにします。

var newOrder = sortables.serialize(function(el, index) {
    return el.get('data-id'); // or el.retrieve('id'); if you have one. 
});

最後に、送信イベントでそれを行う必要はありません-次のようなことを行うことができます:

var orderField = document.id("i_something_order");
new Sortables('#order-grid', {
    onComplete: function() {
        orderField.set('value', this.serialize(function(el) {
            el.retrieve('id');
        }).join(','));
    }
});

事前retrieveに使用したことを意味することに注意してください。storeそれがあなたが求めているDOM属性である場合は、それを実行するel.get('data-id')か、提案されているとおりに実行してください。

于 2012-04-24T11:42:58.247 に答える