0

私は最近、この同じプロジェクトに関する質問を投稿し、walkietokyo から有益な回答を得ました。前の質問

したがって、私の新しい質問は、そのソリューションを使用してテキスト スプライトを検索可能にすることです。したがって、この場合、作成された動的テキスト フィールドのいずれかをクリックすると、as3 はその特定のテキスト フィールドの内容を xml 内のデータと照合し、それを行うと、ノードのコンテナ内から別のノードを取得します。 xml の各部分 (たとえば

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

クリックしたテキストフィールドが chris 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 を定義する行に問題があり続けています (これは、何時間もかけてそれを理解しようとすることでわかります) ) 現在、resultZ のトレースは何も生成しません。これは、まだ機能する入力フィールドを使用して同じ関数をセットアップしているため、currTextfield と関係があることを示しています。どんな助けでも大歓迎ですが、説明的になるようにしてください、私はまだ学んでいます!! ありがとう!!

4

1 に答える 1

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();

後者の場合、Wordlookupxml ドキュメントから属性を省略できます。(もちろん、他の目的で使用されている場合を除きます。)


[0]また、検索パラメーターと場所パラメーターの後に追加したことにも注意してください。これは、E4X では、各「ドリルダウン」XMLListがノードの配列である を生成するためです。のようにアクセサーを指定する[0]ことで、同じ条件に一致するノードが複数あった場合に、最初の結果のみを選択するようにすることができます。これは望ましい結果ではないかもしれませんが、これを省略すると驚くべき結果が生じる可能性があるため、覚えておくことが重要です。

たとえば、xml ドキュメントに、場所 1 と 5 に関連付けられた「chris Cheeser」という名前の 2 人の人物がいるとします。これらの 1 つだけを選択することを指定せずに、上記の同じコードを使用します (ただし、[0]アクセサーは省略します) 。結果は「15」になります。

ただし、[0]アクセサーを使用すると、常に説明に一致する最初のノードが選択されるため、一意でない名前を持つ可能性がある場合は、何らかの方法で真に一意の識別子を使用することを検討する必要があります。

于 2013-02-12T22:48:38.960 に答える