2012-06-20 2 views
0

Я хотел бы узнать, как3 делает что-то делает в bakground. Моя проблема заключается в том, что я пытаюсь упаковать документ с помощью indesign sdk, прямо перед тем, как я импортирую xml, и проблема в том, что документ не может быть сохранен при упаковке, и я уверен, что это связано с тем, что импорт еще не готов. Это код:as3 узнать, если as3 занят чем-либо

IDScriptingEventAdapter.getInstance().addEventListener(Document.AFTER_IMPORT, afterImport);   
    document.xmlElements.item(0).xmlElements.item("test").importXML(File.applicationStorageDirectory.resolvePath("temp/styles.xml")); 

public function afterImport(event:ImportExportEvent):void { 
      var docPackaged:Boolean=app.activeDocument.packageForPrint(packagePath, true, true, true, true, true, true, true); 
     } 

Как вы можете видеть, вызов функции с Document.AFTER_IMPORT слушателя, но по какой-то причине он получает срабатывает в ближайшее время.

После некоторых тестов я заметил, что импорт завершен, но xmlElements arent на месте еще к тому моменту, когда обработчик выполняется. В результате этого документ не готов к тому времени, когда он упакован, поэтому он не может сохранить документ.

Правильная ошибка я получаю это:

Cannot save a copy of “CataloogCS5.indd”.\n 

Так есть путь можно увидеть, если AS разве делать больше ничего (добавляются все xmlElements) или другое решение моей проблемы?

ответ

0

Возможно, вы можете попробовать цикл while для проверки действительности последнего xmlElement в рабочем процессе или попытаться сохранить документ, пока вы не можете, а затем, когда это возможно, сделайте упаковку?

вы можете добавить таймер, чтобы добавить паузу в процесс упаковки.

или

в то время как (! Doc.xmlElements [0] .xmlElements [-1] .isValid) {// ожидание}

или

функция checkIfPackageable() { попробовать { doc.save(); возвращение; } catch (e) { checkIfPackageable(); } }

Возможно, это лучшие варианты.

Надеется, что это помогает,

Лоик