Я пытаюсь вытолкнуть только содержимое атрибута «txt» в каждый тег «вопрос» в массив с именем «вопросы» в AS3 Flash. Вот выдержка из моего xml-файла.Атрибут узла таргетинга XML, нажимать на массив Flash AS3
<question id='Q1' uId='99036' no_ans='2' txt='In a flat structure employees are not expected to provide their bosses with their opinions.' feedback='' type='MC' passingWeight='1' url='media/'>
<answer id='Q1A1' uId='311288' txt='True' weight='0'/>
<answer id='Q1A2' uId='311289' txt='False' weight='1'/>
</question>
<question id='Q2' uId='99037' no_ans='2' txt='In a hierarchy, information typically flows downward.' feedback='' type='MC' passingWeight='1' url='media/'>
<answer id='Q2A1' uId='311290' txt='True' weight='1'/>
<answer id='Q2A2' uId='311291' txt='False' weight='0'/>
</question>
<question id='Q3' uId='99038' no_ans='2' txt='Someone who keeps many projects going at one time is an example of someone who is flexible-time oriented.' feedback='' type='MC' passingWeight='1' url='media/'>
<answer id='Q3A1' uId='311292' txt='True' weight='1'/>
<answer id='Q3A2' uId='311293' txt='False' weight='0'/>
</question>
Вот моя попытка цикла:
// get number of questions
trace(myXML.question.length());
numberOfQuestions = myXML.question.length();
//loop and push questions into questions array at top
for (var i:int = 0; i < numberOfQuestions; i++) {
trace("Hello.");
questions.push([email protected]);
trace(questions);
}
Это просто выталкивает все 9 вопросов сразу в каждой позиции массива. Я хотел 1 вопрос на позицию массива. Я не уверен, как использовать атрибут id в теге вопроса, чтобы различать каждый вопрос.
EDIT: Я попробовал это, и я могу получить доступ к вопросам текстов, используя getQuestionAt (2) внутри функции processXML, но не за его пределы.
var myXML:XML;
var myLoader:URLLoader = new URLLoader();
myLoader.load(new URLRequest("html/VUBZ7318CROSSCULTUREQUIZ/manifest.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);
function processXML(e:Event):void {
myXML = new XML(e.target.data);
//trace(myXML.question)
// get number of questions
trace(myXML.question.length());
numberOfQuestions = myXML.question.length();
//Question list
var questions:Object = {};
//Extracting question from xml
for each (var item:XML in myXML.question) {
questions[item. @ id] = item. @ txt;
}
//Some method for fetching question from question list
function getQuestionAt(index:Number):String {
if (questions["Q" + index] == undefined) {
throw new Error("Wrong index for question!!!");
}
return questions["Q"+index];
}
//Getting question from list
trace("Here is question No 2:\t" + getQuestionAt(2));
}
Как получить доступ к одному из вопросов, с другой кадр в FLA? Я попытался заполнить текстовое поле ** text_txt.htmlText = getQuestionAt (2); ** на кадре 6, и он не работает. – Livi17
Создайте новый слой, который имеет только один кадр, и сделайте длину этого кадра до тех пор, пока ваши полные кадры (например, 6). Затем добавьте код AS в этот фрейм. В этом случае вы можете вызывать функцию в любом кадре, потому что она «видима» во всех кадрах. – Engineer
Я пробовал ваше предложение, но оно все еще не работает ... это потому, что я помещаю ваш код в функцию ** processXML() **? См. Мое редактирование выше. Он работает внутри функции, но не снаружи, ни где-либо еще в fla. – Livi17