1

問題/質問

リスト番号 ( sortIndex ) の取得に問題があります。「サンプルリスト」のようにsortIndexを取得したら、toArray関数にsortIndexを渡したいと思います。したがって、この関数が配列を作成するときは、sortIndex init があります。「配列の例」を参照してください

使用する jQuery プラグイン: mjsarfatti jQuery nestedSortable

例のリスト

html で一覧表示:

    <ol class="sortable ui-sortable">
    <li id="category_1"><div>Car</div>
       <ol>
           <li id="category_2"><div>Color</div>
                <ol>
                    <li id="category_3"><div>Red</div></li>
                    <li id="category_4"><div>Black</div></li>
                </ol>
           </li>
       </ol>
    </li>
    <li id="category_5"><div>Motor</div></li>
    <li id="category_6"><div>Truck</div></li>
    </ol>

リストの例。上記のリストを表示します。

[sortIndex] [Name]
1. Car
    1. Color
       1. Red
       2. Black
2. Motor
3. Truck

配列の例

nestedSortable toArray では、次のように、array() に sortIndex を追加すると便利です。

["storage":"ArrayObject":private]=>
  array(1) {
    ["newList"]=>
    array(7) {
      [0]=> //This is the OL
      array(5) {
        ["item_id"]=>
        string(0) ""
        ["parent_id"]=>
        string(4) "none"
        ["depth"]=>
        string(1) "0"
        ["left"]=>
        string(1) "1"
        ["right"]=>
        string(2) "38"
      }
      [1]=> // Car
      array(6) {
        ["item_id"]=>
        string(1) "1"
        ["parent_id"]=>
        string(0) ""
        ["sort_index"]=>
        string(1) "1"
        ["depth"]=>
        string(1) "1"
        ["left"]=>
        string(1) "2"
        ["right"]=>
        string(1) "9"
      }
      [2]=> // Color
      array(6) {
        ["item_id"]=>
        string(1) "2"
        ["parent_id"]=>
        string(1) "1"
        ["sort_index"]=>
        string(1) "1"
        ["depth"]=>
        string(1) "2"
        ["left"]=>
        string(1) "3"
        ["right"]=>
        string(1) "8"
      }
      [3]=> // Red
      array(6) {
        ["item_id"]=>
        string(1) "3"
        ["parent_id"]=>
        string(1) "2"
        ["sort_index"]=>
        string(1) "1"
        ["depth"]=>
        string(1) "3"
        ["left"]=>
        string(1) "4"
        ["right"]=>
        string(1) "5"
      }
      [4]=> // Black
      array(6) {
        ["item_id"]=>
        string(1) "4"
        ["parent_id"]=>
        string(1) "2"
        ["sort_index"]=>
        string(1) "2"
        ["depth"]=>
        string(1) "3"
        ["left"]=>
        string(1) "6"
        ["right"]=>
        string(1) "7"
      }
      [5]=> // Motor
      array(6) {
        ["item_id"]=>
        string(2) "5"
        ["parent_id"]=>
        string(0) ""
        ["sort_index"]=>
        string(1) "1"
        ["depth"]=>
        string(1) "1"
        ["left"]=>
        string(2) "10"
        ["right"]=>
        string(2) "11"
      }
      [6]=> // Truck
      array(6) {
        ["item_id"]=>
        string(2) "6"
        ["parent_id"]=>
        string(0) ""
        ["sort_index"]=>
        string(1) "1"
        ["depth"]=>
        string(1) "1"
        ["left"]=>
        string(2) "10"
        ["right"]=>
        string(2) "11"
      }
   }
}

nestedSortable プラグインの toArray 関数

これは、NestedSortable プラグインの toArray 関数です。私は挿入しました

"ソート_インデックス": ,

ret.push()

toArray 関数:

toArray: function(options) {

            var o = $.extend({}, this.options, options),
                sDepth = o.startDepthCount || 0,
                ret = [],
                left = 2;

            ret.push({
                "item_id": o.rootID,
                "parent_id": 'none',
                "depth": sDepth,
                "left": '1',
                "right": ($(o.items, this.element).length + 1) * 2
            });

            $(this.element).children(o.items).each(function () {
                left = _recursiveArray(this, sDepth + 1, left);
            });

            ret = ret.sort(function(a,b){ return (a.left - b.left); });

            return ret;

            function _recursiveArray(item, depth, left) {

                var right = left + 1,
                    id,
                    pid;

                if ($(item).children(o.listType).children(o.items).length > 0) {
                    depth ++;
                    $(item).children(o.listType).children(o.items).each(function () {
                        right = _recursiveArray($(this), depth, right);
                    });
                    depth --;
                }

                id = ($(item).attr(o.attribute || 'id')).match(o.expression || (/(.+)[-=_](.+)/));

                if (depth === sDepth + 1) {
                    pid = o.rootID;
                } else {
                    var parentItem = ($(item).parent(o.listType)
                                             .parent(o.items)
                                             .attr(o.attribute || 'id'))
                                             .match(o.expression || (/(.+)[-=_](.+)/));
                    pid = parentItem[2];
                }

                if (id) {
                        ret.push({"item_id": id[2], "parent_id": pid, "sort_index": , "depth": depth, "left": left, "right": right});
                }

                left = right + 1;
                return left;
            }

        },

私が言ったように、toArray 関数に sort_Index を与えるのはいいことですが、私は今何日も探していて、これを解決する方法がまったくわかりません。

4

1 に答える 1

0

問題が解決しました

jQueryプラグインを編集する。

次の行を _recursiveArray(item, depth, left) 関数に追加します。

si = ($(item).index(o.item));

var si を定義します。

var right = left + 1,
    id,
    pid,
    si;

そして ret.push に、次のように変数を追加します。

ret.push({"item_id": id[2], "parent_id": pid, "sort_index": si+1, "depth": depth, "left": left, "right": right});

したがって、次のようになります。

toArray: function(options) {

    var o = $.extend({}, this.options, options),
        sDepth = o.startDepthCount || 0,
        ret = [],
        left = 2;

    ret.push({
        "item_id": o.rootID,
        "parent_id": 'none',
        "sort_index" : this.element.index(this.element),
        "depth": sDepth,
        "left": '1',
        "right": ($(o.items, this.element).length + 1) * 2
    });

    $(this.element).children(o.items).each(function () {
        left = _recursiveArray(this, sDepth + 1, left);
    });

    ret = ret.sort(function(a,b){ return (a.left - b.left); });

    return ret;

    function _recursiveArray(item, depth, left) {

        var right = left + 1,
            id,
            pid,
            si;

        if ($(item).children(o.listType).children(o.items).length > 0) {
            depth ++;
            $(item).children(o.listType).children(o.items).each(function () {
                right = _recursiveArray($(this), depth, right);
            });
            depth --;
        }

        id = ($(item).attr(o.attribute || 'id')).match(o.expression || (/(.+)[-=_](.+)/));

        if (depth === sDepth + 1) {
            pid = o.rootID;
        } else {
            var parentItem = ($(item).parent(o.listType)
                                     .parent(o.items)
                                     .attr(o.attribute || 'id'))
                                     .match(o.expression || (/(.+)[-=_](.+)/));
            pid = parentItem[2];
        }

        si = ($(item).index(o.item));

        if (id) {
                ret.push({"item_id": id[2], "parent_id": pid, "sort_index": si+1, "depth": depth, "left": left, "right": right});
        }

        left = right + 1;
        return left;
    }

},
于 2013-04-12T11:50:41.430 に答える