2013-02-12 3 views
0

Недавно я опубликовал вопрос по этому же проекту, на который был дан полезный ответ walkietokyo. previous questionСоздание динамически созданного текстового поля для поиска в xml

Так что мой новый вопрос использует это решение, чтобы сделать текст спрайтов доступным для поиска. Итак, в этом случае вы можете щелкнуть по любому из созданных динамических текстовых полей, as3 будет соответствовать содержимому этого конкретного текстового поля для данных в xml, при этом он заберет еще один узел из контейнера узлы для каждой части XML (например

<Searchtext Wordlookup="chris cheeser"> 
<location>1</location> 
<Name>chris cheeser</Name> 
</Searchtext> 

так что было бы заметить, что текстовое поле я нажал наполнен Крис Громобой, было бы тогда совпадающие с моим Wordlookup, и определить местоположение и совпадающее с мой мувик того же имени)

мой текущий as3 выглядит следующим образом:

private function XMLLoader(e:Event):void 
    { 
     xmlData = new XML(e.target.data); 
     ParseList(xmlData); 

    } 

    private function ParseList(nameData:XML):void 
    { 
    var nameList:XMLList = nameData.Searchtext.Name; 
//  var textContainer:Sprite = new Sprite(); 
    this.addChild(textContainer); 

    for each (var nameElement:XML in nameList){ 
//  var format:TextFormat = new TextFormat(); 
    format.font = "Arial MT"; 
    format.size = 22; 
    format.color = 0x006699; 
    var currTextField:TextField = new TextField(); 
    currTextField.defaultTextFormat = format; 
    currTextField.appendText(nameElement.text() + "\n"); 
    currTextField.y= 1297 + textContainer.height; 
    currTextField.height = 40; 
    currTextField.width = 280; 
    currTextField.x= 88; 
    currTextField.selectable = false; 
    textContainer.addChild(currTextField); 
    trace(nameElement.text()); 

     } 

    } 

    private function onTextClick(e:Event):void 
    { 
    var currTextField:TextField = e.target as TextField; 

    if (SearchHolder != null){ 
     TweenMax.to((this["$" + SearchHolder]), 1, {removeTint:true}); 
     } 
      var resultZ:String = xmlData.Searchtext.(@Wordlookup == currTextField.text.toLowerCase).location.toString() 
    SearchHolder = resultZ ? resultZ : "Try again"; 
     trace(resultZ); 
    TweenMax.to(["$" + SearchHolder], 1, {tint:0x00ffcc}); 
    trace("This name was clicked:", currTextField.text); 

    } 

все, что было закомментировано, было помещено вне функции, как resultZ, так и SearchHolder, были объявлены как строки публично, но у меня проблема с линией, определяющей результат var resultZ (я знаю это через часы попыток пробовать чтобы понять это). Прямо сейчас мой след для resultZ ничего не дает, что говорит мне, что это имеет какое-то отношение к currTextfield, поскольку у меня есть идентичная функция, настроенная с полем ввода, которое все еще работает. Любая помощь будет оценена, но постарайтесь быть описательной, я все еще участвую! Благодаря!!

ответ

0

Вы, кажется, пропустили круглые скобки по методу toLowerCase().

Попробуйте это:

var resultZ:String = xml.Searchtext.(@Wordlookup == currTextField.text.toLowerCase())[0].location[0].toString(); 

В качестве альтернативы, вместо того, чтобы дублировать имя и как узел и атрибут, вы можете использовать E4X подобным образом, чтобы отфильтровать узлы на основе содержания его дочерних узлов, как это:

var resultZ:String = xml.Searchtext.(Name == currTextField.text)[0].location[0].toString(); 

В последнем случае можно опустить атрибут Wordlookup из вашего XML-документа. (Если, конечно, он не используется для других целей.)


Также обратите внимание, что я добавил [0] после поиска и определения местоположения параметров. Это связано с тем, что в E4X каждое «развертка» создает XMLList, который представляет собой массив узлов. Указав аксессуар, такой как [0], вы можете выбрать только первый результат, если бы было несколько узлов, соответствующих тем же критериям. Это может быть не желаемый результат, но важно иметь в виду, поскольку упущение может дать неожиданные результаты.

Скажите, например, что два человека в вашем документе xml называются «chris cheeser», которые связаны с местоположениями 1 и 5. Без указания того, что вы хотите только выбрать один из них, тот же код выше (но опустив аксессуры [0]) даст результат «15».

Однако при использовании аксессуара [0] всегда будет выбран первый узел, соответствующий описанию, поэтому, если есть вероятность, что у вас могут быть уникальные имена, возможно, вам придется каким-то образом использовать поистине уникальные идентификаторы.

+0

Таким образом, я сузил его до определенной проблемы. Я выполнил ваш ответ, но он не полностью исправлен.Я не получаю никаких ошибок, но вспышка не соответствует выходному сигналу целевого текстового поля на что-либо в xml. Он отслеживает вывод целевого текстового поля без проблем, поэтому я не уверен, почему это происходит, все соответствует написанию и типу. Может быть, это потому, что текстовые поля создаются с помощью спрайтов, и это может затруднить поиск строки? (это полная догадка). Я ДЕЙСТВИТЕЛЬНО оцениваю всю вашу помощь, вы были чрезвычайно полезны! –

+0

Постарайтесь думать только о точном коде, требуемом для выполнения того, что вы хотите. Есть что-то, что вы пропустили? Что-то не так о структуре вашего XML? [Здесь вы найдете немного измененную версию кода] (http://pastebin.com/bKbLuUCG). Я предоставил для вашего последнего вопроса, который содержит _only_ код для получения имени из текстового поля и использования его для поиска XML-документ. –

+0

Я этого даже не видел до сих пор. Я должен поблагодарить вас за то, что постоянно помогал мне. Я вернулся в этот раздел после перерыва и внедрил ваши предложения. Несмотря на то, что орфография и все совпадения совпадают, узел местоположения все еще возвращает нуль (даже если узел имени не имеет имени). Я не могу понять, почему. –

Смежные вопросы