我最近在walkietokyo帮助回答的同一个项目中发布了一个问题。 previous question
所以我的新问题是使用该解决方案来使文本精灵可搜索。 因此,在这种情况下,您可以单击创建的任何动态文本字段,as3会将该特定文本字段的内容与xml中的数据进行匹配,一旦这样做,它将从节点容器中拾取另一个节点对于xml的每个部分(例如
)<Searchtext Wordlookup="chris cheeser">
<location>1</location>
<Name>chris cheeser</Name>
</Searchtext>
所以它会注意到我点击的文本字段用chris cheeser填充,然后它会与我的Wordlookup匹配,并识别位置,并将其与我同名的movieclip相匹配)
我目前的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);
}
注释掉的所有内容都放在函数外部,结果是resultZolder和SearchHolder都被公开标识为字符串,但是我对定义var resultZ的行一直存在问题(我知道这通过几个小时的试图想出来)现在我对resultZ的追踪什么都没有产生,这告诉我它与currTextfield有关,因为我有一个相同的功能设置,输入字段仍然可以工作。 任何帮助将不胜感激,但尝试描述,我还在学习!谢谢!!
答案 0 :(得分:0)
您似乎错过了toLowerCase()
方法的括号。
试试这个:
var resultZ:String = xml.Searchtext.(@Wordlookup == currTextField.text.toLowerCase())[0].location[0].toString();
或者,不是将名称复制为节点和属性,而是可以使用E4X以类似的方式根据子节点的内容过滤掉节点,如下所示: / p>
在后一种情况下,您可以省略xml文档中的 另请注意,我在搜索和位置参数后添加了var resultZ:String = xml.Searchtext.(Name == currTextField.text)[0].location[0].toString();
Wordlookup
属性。 (当然,除非它被用于其他目的。)
[0]
。这是因为在E4X中,每个“向下钻取”都会生成XMLList
,这是一个节点数组。通过指定[0]
之类的访问器,您可以确保只选择第一个结果,以防有多个节点匹配相同的条件。这可能不是理想的结果,但重要的是要记住,因为省略它可以产生令人惊讶的结果。 [0]
访问者)会产生结果“15”。
但是,使用[0]
访问器将始终选择与描述匹配的第一个节点,因此如果您可能具有非唯一名称,则可能必须考虑以某种方式使用真正唯一的标识符