2

我正在开发一个实用程序 Web 应用程序,以帮助操作一些特定于域的 XML 数据。

流程是这样的:

  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 回答