Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   XML + dataGrid (http://www.flasher.ru/forum/showthread.php?t=157382)

Avroraoff 04.06.2011 23:40

XML + dataGrid
 
в кадре только dataGrid
написан такой код:
Код AS1/AS2:

stop();
onEnterFrame = function () {
        var path:String = mdm.Application.path;
        if (path == undefined) {
                path = "";
        }
        var myFiles:Array = mdm.FileSystem.getFileList(mdm.Application.path+"\\zakaz\\", "*.xml");
        var myDP:Array = new Array();
        var temp1:XML = new XML();
        temp1.ignoreWhite = true;
        for (i=0; i<myFiles.length; i++) {
                var path1:String = myFiles[i].toString();
                temp1.load(path+"\\zakaz\\"+path1);
                temp1.onLoad = function(success) {
                        str1 = temp1.childNodes[0].childNodes[0].firstChild.nodeValue.toString();
                        str2 = temp1.childNodes[0].childNodes[1].firstChild.nodeValue.toString();
                        str3 = temp1.childNodes[0].childNodes[2].firstChild.nodeValue.toString();
                        str4 = temp1.childNodes[0].childNodes[3].firstChild.nodeValue.toString();
                };
                myDP.addItem({id:str1, name:str2, price:str3});
                aDg.dataProvider = myDP;
        }
};

Предполагается, что сначала в массив заносятся имена всех файлов, содержащихся в папке. Затем в цикле поочередно загружается каждый файл и из него считываются необходимые значения узлов. Все это заносится в dataGrid. Но у меня вся таблица заполняется данными только из последнего файла. В чем проблема и как это исправить?

Добавлено через 1 минуту
извиняюсь, тему не в ту ветку написала

alexcon314 05.06.2011 00:09

Вам нужно загружать файлы либо разными лоадерами (объектами XML), либо одним, но по принципу эстафеты: загрузка следующего файла не стартует, пока не закончится загрузка предыдущего, о чем сигнализирует событие onLoad().
Загрузка файла во флеше асинхронная. Потому в вашем коде цикл выполняется мгновенно. Соответственно, срабатывает onLoad() для последнего файла.
Можете попробовать грузить файл методом mdm.FileSystem.loadFile() . Он должен синхронно работать. Т.е. возвратит вам просто строку-содержание файла, сразу, без всяких onLoad(). Ее и отдадите XML().

Avroraoff 05.06.2011 00:49

список вывела, уже хорошо!только еще одна проблема - вместо русских букв - квадратики.
xml-файлики создаю с помощью того же цинка
mdm.FileSystem.saveFileUnicode(mdm.Application.path+"\\zakaz\\"+_global.numz+".xml", str);
то есть сохраняю в utf-8 (покрайней мере так написано в хелпе в цинку)
значит проблема в чтении??ее можно как-то обойти или исправить?

alexcon314 06.06.2011 00:55

Хм. Помнится, здесь кто-то успешно пользовался mdm.FileSystem.saveFileUnicode(), была тема на эту "тему"... попробуйте поискать.
Да вот:
http://www.flasher.ru/forum/showthread.php?t=118517
http://www.flasher.ru/forum/showthre...=117341&page=2
Проверьте все еще раз. Посмотрите на форуме mdm.
Если не работает - значит баг.

Avroraoff 07.06.2011 16:24

использовала функцию mdm.FileSystem.saveFileUnicode(), получилось еще веселее...
у меня есть набор xml-файликов размером ~1 - 5 килобайт. так вот эта функция выборочно читает некоторые файлы, а для некоторых выдает ошибку при компиляции
"Byffer overrun detected!
A buffer overrun has been detected which has corrupted the programs internal state. The programm cannot safely continue execution and must now be terminated."
как я понимаю, переполняется буфер, причем при загрузке различных файлов, некоторые по 5 Кб загрузились нормально
только не совсем понятно, буфер переполняется при загрузке файла или при выполнении парсинга?
Мой код
Код AS1/AS2:

var path:String = mdm.Application.path;
if (path == undefined) {
        path = "";
}
var myFiles:Array = mdm.FileSystem.getFileList(mdm.Application.path+"\\zakaz\\", "*.xml");
var myDP:Array = new Array();
var temp1:XML = new XML();
temp1.ignoreWhite = true;
path1 = myFiles[4].toString();
//var dt:String = mdm.FileSystem.loadFileUnicode(mdm.Application.path+"\\zakaz\\"+path1);
var dt:String = mdm.FileSystem.loadFileUnicode(mdm.Application.path+"\\zakaz\\89.xml");
temp1.parseXML(dt);
str1 = temp1.childNodes[0].childNodes[0].firstChild.nodeValue.toString();
str2 = temp1.childNodes[0].childNodes[1].firstChild.nodeValue.toString();
str3 = temp1.childNodes[0].childNodes[2].firstChild.nodeValue.toString();
str4 = temp1.childNodes[0].childNodes[3].firstChild.nodeValue.toString();
str5 = temp1.childNodes[0].childNodes[4].firstChild.nodeValue.toString();
myDP.addItem({Номер:Number(str1), Дата:String(str2), Заказчик:String(str3), Заказ:String(str4), Тип:String(str5)});
aDg.dataProvider = myDP;
aDg.sortItemsBy("Номер", Array.NUMERIC);
aDg.setStyle("hGridLines", true);


alexcon314 07.06.2011 18:22

Что значит "для некоторых выдает ошибку при компиляции"? При какой такой компиляции? Во флеше, в цинке? Или эта ошибка вылезает во время исполнения вашей программы все-таки? Как вы ее увидели?
Попытался воспроизвести как мог вашу проблему: (Flash 8, Zinc 2.5.0.34, AS2, Windows XP SP3)
Код:

save.onRelease = function()
{
        mdm.FileSystem.saveFileUnicode(mdm.Application.path+"file.xml","<node>вывыв</node>");
}
load.onRelease = function()
{
        out.text = mdm.FileSystem.loadFileUnicode(mdm.Application.path+"file.xml");
}

Все работает как надо. Строка сохраняется в utf-8, потом корректно загружается и отображается, никаких квадратиков.
Валидный ли xml вы формируете и потом грузите?

Avroraoff 07.06.2011 19:13

Вложений: 1
1. В цинке запускаю "Build project", стоит галочка - запустить проект по завершении, проект запускается и вылазит данная ошибка
2. если ставлю другой файлик из имеющихся на загрузку, то все работает как надо и правильно подгружает инфу на русском
все файлы создаются одинаково командой mdm.FileSystem.saveFileUnicode, единственное различие в количестве дочерних узлов (структура:корневой узел <win></win> и дочерние <OBJ></OBJ>).
Вобщем загрузила исходник и два xml-файла. Файл 3289.xml у меня подгружается и все красиво выводится на русском, а при загрузке 89.xml вылазит ошибка. Попробуйте проверить программу, если есть время, может сможете понять в чем проблема?

alexcon314 08.06.2011 11:12

Ок. Посмотрел ваш исходник.
1. Если запускать как есть - ничего не выводит в DataGrid.
2. Если добавить в первый кадр
Код:

var myDP:Array = new Array();
,
выводит две идентичные по содержанию строчки, да, с русскими буквами все хорошо. Как при загрузке 89.xml, так и при загрузке 3289.xml.
3.Назанчение кода во втором кадре не понял.
Т.е. оба файла у меня грузятся, никаких ошибок не вылазит. Все нормально.
Повторю конфигурацию: Flash 8, Zinc 2.5.0.34, AS2, Windows XP SP3 (32 bit).
Вот все что могу сказать.
Я больше склоняюсь к мысли о баге самого цинка. И дело совсем не в файлах xml. Посмотрите вот эту информацию
http://www.flasher.ru/forum/showthre...=104606&page=2
В качестве эксперимента попробуйте грузить так:
Код:

var dt:String = mdm.FileSystem.loadFileUnicode("zakaz\\3289.xml");
т.е без mdm.Application.path.

Avroraoff 08.06.2011 16:34

я тоже склоняюсь к версии о баге цинка, спасибо за помощь!!


Часовой пояс GMT +4, время: 05:50.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.