2

私は、ドメイン固有のXMLデータの操作を支援するユーティリティWebアプリに取り組んでいます。

フローは次のようになります。

  1. XMLファイルをロードする
  2. ブラウザのネイティブXMLオブジェクト(jQueryではありません!)を使用してXMLファイルを解析し、JavaScriptオブジェクトに変換します。
  3. $(document).data()を使用して結果のオブジェクトを保存します
  4. オブジェクトを反復処理して追加情報を抽出し、それを別の$(document).data()スロットに保存します
#4はかなり時間がかかるので、私はwindow.setTimeout()作業をチャンクに分割するために使用しています。

関数は次のとおりです。

function explodeDataStep(index, max) {
    var data = $(document).data('data');
    var lists = $(document).data('lists');
    $debug('explodeDataStep', index, $(document).data('data'), $.data(document));

    var count = 0;
    for (index; index < data.vehicles.length; index++) {
        var vehicle = data.vehicles[index];

        if ($.inArray(vehicle.make, lists.make) < 0) lists.make.push(vehicle.make);
        if ($.grep(lists.model, function(v) { return v.make == vehicle.make && v.model == vehicle.model; }).length == 0) lists.model.push({ make: vehicle.make, model: vehicle.model });
        if ($.inArray(vehicle.module, lists.module) < 0) lists.module.push(vehicle.module);
        if ($.inArray(vehicle.doorlock, lists.doorlock) < 0) lists.doorlock.push(vehicle.doorlock);
        if ($.inArray(vehicle.doorlockCombo, lists.doorlockCombo) < 0) lists.doorlockCombo.push(vehicle.doorlockCombo);
        if ($.inArray(vehicle.tHarness, lists.tHarness) < 0) lists.tHarness.push(vehicle.tHarness);

        count++;
        if (count >= max) {
            index++;
            updateExplodeDataStatus(index);
            window.setTimeout(explodeDataStep, 10, index, max);
            return;
        }
    }
    finishExplodeData();
}

なんらかの理由で、インデックスが480前後になると、$(document).data('data')に格納されているデータの一部が消えてしまい、一生理解できなくなります。どうして。

だから、ここに答えにつながるかもしれないいくつかの質問があります:

  • この方法で使用window.setTimeout()することは信じられないほど悪い考えですか?
  • jQuery.data()を使用して保存できる量に制限はありますか?私のXMLファイルは約100KBです。
4

2 に答える 2

1

これは恥ずかしいです...

コードの他の場所で Array.splice() を使用していました。それでいい。うん。

于 2009-11-23T23:37:36.220 に答える
0

この場合、私は jQuery を使用せず、代わりにネイティブ JavaScript オブジェクトとして情報を保存します。

于 2009-11-23T23:26:19.057 に答える