2013-02-12 69 views
0

我最近發佈了一個關於walkietokyo有幫助的同一個項目的問題。 previous question製作動態創建的文本框可在xml中搜索

所以我的新問題是使用該解決方案來使文本精靈可搜索。 因此,在這種情況下,您可以點擊任何已創建的動態文本字段,as3會將該特定文本字段的內容與xml中的數據進行匹配,在此過程中,它會從容器內拾取另一個節點爲XML(例如各部分節點

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

所以它會注意到我點擊充滿克里斯cheeser的文本框,它會再匹配以我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的行有一個問題(我通過幾個小時的嘗試找出它)現在我的跟蹤結果Z沒有產生任何東西,這告訴我這與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(); 

在後一種情況下,你可以省略從XML文檔的屬性Wordlookup。 (除非,當然,它被用於其他用途。)


另外請注意,我的搜索和位置參數後添加[0]。這是因爲在E4X中,每個「深入」產生一個XMLList,這是一個節點陣列。通過指定一個訪問器,如[0],您可以確保只選擇第一個結果,以防有多個節點匹配相同的條件。這可能不是理想的結果,但請務必謹記,因爲忽略它可能會產生令人驚訝的結果。例如,假設xml文檔中有兩個人稱爲「chris cheeser」,它們與位置1和5相關聯。沒有指定您只想選擇其中的一個,則使用上面相同的代碼(但是省略[0]訪問器)將產生結果「15」。

但是,使用[0]訪問器將始終選擇與描述匹配的第一個節點,因此如果您有機會獲得非唯一名稱,則可能需要考慮以某種方式使用真正唯一的標識符。

+0

所以我把它縮小到一個特定的問題。我實現了你的答案,但並沒有完全解決。我沒有得到任何錯誤,但閃光燈並未將目標文本字段的輸出與xml中的任何內容相匹配。它跟蹤目標文本字段的輸出沒有問題,所以我不確定爲什麼會發生這種情況,所有內容都匹配拼寫和類型大小寫。也許這是因爲文本字段是精靈創建的,這可能會使字符串難以搜索? (這是一個完整的猜測)。我真的很感謝你的幫助,你一直非常樂於助人! – 2013-02-15 16:21:17

+0

嘗試只考慮所需的確切代碼來做你想做的事。你有沒有錯過?關於XML的結構有什麼問題嗎? [在這裏,你會發現一個稍微修改過的代碼版本](http://pastebin.com/bKbLuUCG)我提供了最後一個問題,其中包含_only_代碼,用於從文本字段獲取名稱並使用它來搜索XML文檔。 – 2013-02-15 22:06:50

+0

直到現在我還沒有看到這個。我非常感謝你爲我提供的幫助。我休息一會兒後回到本節,並實施您的建議。即使拼寫和所有匹配,位置節點仍會返回空(儘管名稱節點不會)。我似乎無法弄清楚爲什麼。 – 2013-03-11 18:31:55