下面是在自己在运用DropDownList时,DropDownList.set selectedItem()方法触发事件的问题
需求很简单,初始化UI时,从数据库查出“生词本”放入DropDownList;选择不同的“生词本”,则再查询出这个生词本里的生词。
但我有个想法:如果用户选择了某个生词本后,查询过程中出了意外未能成功返回所需数据,则DropDownList的选项不改变。结果我在实现这个想法的过程中,遇到了麻烦。
代码如下:
在mxml文件中,我有一个DropDownList,表示“生词本”:
上边的controller是这个UI的控制类,其 handleDdlChange方法如下:
我的想法是,在DropDownList changing 时,先prevent掉他的默认改变,并往后台递交一个查询,这个查询在dataList中封装好了,是一个RemoteObject call,然后根据查询的结果,用编程方式设置DropDownList的selectedItem(见函数①、②)。
本来觉得应该挺好,但是一运行,发生了问题.... 函数①中的最后一句代码"view.ddlBook.selectedItem=selObj"竟然触发了changing事件,于是,handleDdlChange方法被调用,于是...我的程序死循环了,1秒之内我的后台收到了几百次查询。
我原本以为编程方式设置DropDownList的selectedItem时,是不会触发changing 事件的,不过它确实发生了。跟踪set selectedItem()方法,发现它直接把逻辑代理给了下面这个函数,我们称之为函数③:
首先,函数③的最后一句,会开始这样的后续流程:invalidateProperties() --> commitProperties -->