XML-глоссарий AS2 с загрузкой текста
У меня есть следующий глоссарий пример кода XML as2 из flashkit, и когда я пытался выполнить трассировку, чтобы увидеть, как текст загружается из XML, я не мог понять, как код на самом деле находит правильную запись для загрузки. Когда я выполняю трассировку, он возвращает мне полный массив записей XML вместо одного.
_master.termByID = function(termID:String) {
displayTermByID(termID);
};
function displayTermByID(termID:String):Void {
var info:String = "";
var originalTerm = termID;
var found = findTermIndex(termID);
trace("im here");
while(found == -1 && termID.length > 0){
info = "The referenced term ID <i>"+originalTerm+"</i> was not found. <br>";
trace("info:"+info);
found = findTermIndex(termID);
trace("found:"+found);
termID=termID.substr(0,termID.length-1);
trace("termID:"+termID);
}
if(found != -1 && originalTerm != termID){
info += "Displaying closest matches: " + termID + "<br>";
} else if (termID.length ==0){
info += "No substring yielded any matches.<br>";
}
whichTerm = found;
updateInterface(info);
}
это основной метод, используемый для отображения текста, но когда я сделал трассировку, он даже не отображается в консоли, и все же текст отображается в текстовом поле.
function findTermIndex(termID:String):Number {
var pow:Number = 2;
var numTerms = termArray.length;
var split:Number = Math.round(numTerms/pow);
var currId = termArray[split].attributes.id;
while (currId != termID && numTerms/pow>.5) {
pow *= 2;
if (currId<termID) {
split += Math.round(numTerms/pow);
} else {
split -= Math.round(numTerms/pow);
}
currId = termArray[split].attributes.id;
}
if (currId == termID) {
return (split);
} else {
return (-1);
}
}
это используется, чтобы найти термин индекс.
function parse(glosSrc:XML):Void {
var numTerms = glosSrc.childNodes.length;
for (var i = 0; i<numTerms; i++) {
var thisChild = glosSrc.childNodes[i];
var insertPoint = termArray.length;
while (insertPoint>0 && termArray[insertPoint-1].attributes.id>thisChild.attributes.id) {
insertPoint--;
}
termArray.splice(insertPoint, 0, thisChild);
// use this to get the imgURL value
//trace(glosSrc.childNodes[i].childNodes[1].firstChild.nodeValue);
//thisImg = String(glosSrc.childNodes[i].childNodes[1].firstChild.nodeValue);
}
searchTerms("");
//imgLoader.contentPath = thisImg;
}
функция синтаксического анализа XML
function displaySearchResults(matches:Array):Void {
var numMatches = matches.length;
if (numMatches) {
var resultString = '<textformat leading="'+resultLineSpacing+'"><font size="'+fontSize+'">';
for (var i = 0; i<numMatches; i++) {
resultString += '<a href="asfunction:displayTermByIndex,'+matches[i]+'">';
var fullTerm = termArray[matches[i]].firstChild.firstChild.firstChild.nodeValue;
var cleanTerm = escapeAtChar(fullTerm);
resultString += cleanTerm+'</a><br>';
//trace(resultString);
}
resultString += '</font></textformat>';
//def.setTextFormat(resultFormatting);
def.htmlText = resultString;
//trace(resultString);
} else {
def.htmlText = '<font color="#'+errorHexColor+'" size="'+(fontSize+2)+'">No matching terms found.</font>';
}
gBoxPath.onComplete();
}
другой метод, используемый для отображения результирующего текста из XML. def - объект динамического текстового поля, используемый для отображения текста.
поэтому со всеми этими методами я проследил все возможные строки, которые передаются, но все, кажется, либо не возвращают ничего, либо возвращают целый набор параметров вместо того, который должен быть показан.
был бы рад, если кто-то может объяснить, как на самом деле работает код, поэтому я добавлю больше полей в XML.
Весь исходный файл доступен здесь.