我发送一个事件,当一个sql查询没有返回匹配项,这样我就可以继续添加到数据库..似乎actionscript要求我将监听器附加到某个东西,但我真的没有在我的代码中,似乎是逻辑候选的变量。
我只想监听要调用的isNewRecord事件,以便我可以运行insert查询;现在它正在调用addEventListern和dispatchEvent
的可能未定义的方法public function addBG(BG:Number, datetime:String, batch:Boolean = false):void{
checkRecord('Gb', datetime, matchRecord);
addEventListener("isNewRecord", recordExists);
function recordExists()
{/*code to execute query*/}
public function matchRecord(result:SQLResult):void {
var match:String = result.data[0];
if (match == null) {
var allClear:Event = new Event("isNewRecord");
dispatchEvent(allClear);
}
}
答案 0 :(得分:1)
您的代码有问题。你在一个函数中有一个函数。
此外,您的代码是扩展EventDispatcher类(或任何扩展它的类,如Sprite,MovieClip等?)确保它是。
试试这个:
public function addBG(BG:Number, datetime:String, batch:Boolean = false):void
{
// note, you're adding this event listener EVERY TIME you call the
// addBG function, so make sure you remove it OR add it somewhere in the
// init or complete functions
addEventListener("isNewRecord", recordExists);
checkRecord('Gb', datetime, matchRecord);
}
public function recordExists():void
{/*code to execute query*/}
public function matchRecord(result:SQLResult):void {
var match:String = result.data[0];
if (match == null) {
var allClear:Event = new Event("isNewRecord");
dispatchEvent(allClear);
}
}
答案 1 :(得分:0)
您不需要使用活动。您对SQLResult的处理似乎是同步的,由于与用户,服务器或可能需要一些时间的任何事情的任何交互而没有延迟。
当Flash执行您的代码时,它会执行以下操作:
checkRecord('Gb', datetime, matchRecord);
//then
var match:String = result.data[0];
if (match == null) {
var allClear:Event = new Event("isNewRecord");
dispatchEvent(allClear);
}
//and finally
addEventListener("isNewRecord", recordExists);
在添加侦听器之前调度该事件。 这是你应该做的:
public function addBG(BG:Number, datetime:String, batch:Boolean = false):void
{
if (checkRecord('Gb', datetime, matchRecord))
{
recordExists();
}
}
public function recordExists():void
{/*code to execute query*/}
public function matchRecord(result:SQLResult):Boolean{
var match:String = result.data[0];
if (match == null) {
return true;
}
return false;
}
干杯