1

ソート可能なリストのハンドルを取得できないようです。それらはリスト要素のリストであり、それぞれに

そこから値を取得する必要があります。

Sortables.implement({
    serialize: function(){
        var serial = [];
        this.list.getChildren().each(function(el, i){
            serial[i] = el.getProperty('id');
        }, this);
        return serial;
    }
});



var sort = new Sortables('.teams', {
        handle: '.drag-handle',
        clone: true,
        onStart: function(el) {
            el.fade('hide');
        },
        onComplete: function(el) {
            //go go gadget go
            order = this.serialize();
            alert(order);
            for(var i=0; i<order.length;i++) {
                if (order[i]) {
                    //alert(order[i].substr(5, order[i].length));
                }
            }
        }
    });

sortables リストは、ループ内のリストに追加されますsort.addItems(li);。しかし、sortables onComplete 宣言の外で sortables を取得しようとすると、js は this.list が未定義であると言います。


別の角度から問題にアプローチする:

DOM をループしようとすると、同様に奇妙な結果が得られます。いくつかのコードの firebug コンソールの結果は次のとおりです。

var a = document.getElementById('teams').childNodes;
var b = document.getElementById('teams').childNodes.length;

try {
    console.log('myVar: ', a);
    console.log('myVar.length: ', b);
} catch(e) {
    alert("error logging");
}

HTML に 1 つの li 要素を (JS を介して注入されるのではなく) ハードコーディングすると、長さ == 1 が変更され、その単一の要素にアクセスできるようになり、DOM を介して注入された要素にアクセスすることが問題であると信じるようになります (この方法の場合)。

火虫

document.getElementById('teams').childNodes[i]戻り値が未定義のオブジェクトを取得しようとしています。

助けてくれてありがとう!

4

1 に答える 1

1

なぜこれが失敗するのかわからない、私はいくつかの方法でそれを試しました、そしてそれはすべてうまくいきます

http://www.jsfiddle.net/M7zLG/テストケースとhtmlマークアップ

これは、ネイティブの組み込みの.serializeメソッドと、domをウォークしてカスタム属性relを取得するカスタムメソッドを使用して、ローカル参照で機能するソースです。これは、新しい順序でDB IDにすることができます(私はそれを行う)

var order = []; // global

var sort = new Sortables('.teams', {
    handle: '.drag-handle',
    clone: true,
    onStart: function(el) {
        el.fade('hide');
    },
    onComplete: function(el) {
        //go go gadget go
        order = this.serialize();
    }
});

var mySerialize = function(parentEl) {
    var myIds = [];
    parentEl.getElements("li").each(function(el) {
        myIds.push(el.get("rel"));
    });

    return myIds;
};

$("saveorder").addEvents({
    click: function() {
        console.log(sort.serialize());
        console.log(order);
        console.log(mySerialize($("teams")));
    }
});
于 2010-02-23T11:54:07.627 に答える