我一直试图为Scratch创建一个使用网站API来提取用户信息的模式。问题是我必须把它分成两个区块。 (这些块通过调用基于具有块名称和函数名称的表的函数来工作,并传入参数。)我已将其设置在第一个(调用primAskAboutMe)加载来自API的信息的位置,并且然后当信息加载时,用户可以使用第二个块(调用primReportAboutMe)来返回值。问题是我无法获得第二个块来回答答案。
所以要么我试图以错误的方式获取信息,(这是可能的,因为这是我第一次使用Action Script / Flash或其他任何方式),或者我真的不喜欢明白我在做什么。
*注意:Original Scratch Repository。这段代码可以在src / primitives / Primitives.as中找到(但不是因为我还没有将它上传到我自己的存储库中,因为我不确定如何)。
protected var resultAM:String;
protected function primAskAboutMe(b:Block):void {
var user:String = interp.arg(b, 0);
var loader:Loader = new Loader();
var url:String = 'http://www.api.scratch.mit.edu/users/'+user;
var urlReq:URLRequest = new URLRequest(url);
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onCompleteAboutMe );
loader.load(urlReq);
}
protected function onCompleteAboutMe(e:Event):void{
//resultAM = e.target.data;
resultAM="foo";
}
protected function primReportAboutMe():String{
return resultAM;
}
答案 0 :(得分:0)
问题在于我无法让第二个块返回答案。
我认为这是因为您还没有为返回的结果设置接收器。如果您创建报告字符串,然后更新为str_Report = primReportAboutMe();
,则会将resultAM
的文本返回到str_Report
。
这是一个小的可测试的例子。也许它会以某种方式帮助你......
请记住,因为primReportAboutMe
返回String数据,所以必须使用它来更新一些String 变量。
var resultAM:String = "";
var checkResult:String = "";
resultAM="foo";
checkResult = primReportAboutMe(); //# update this String with function returned String
trace ("Check Result is : " + checkResult); //# shows... Check Result is : foo
function primReportAboutMe():String
{
return resultAM; //# returns a String's current value
}