Actionscript 3 Adobe Flex对象不是“;“可写”;
这里的情况很奇怪:因为声明为public的对象可以从一个方法“写入”,而不能从另一个方法写入 以下是一些代码部分:Actionscript 3 Adobe Flex对象不是“;“可写”;,actionscript-3,oop,apache-flex,flex4,Actionscript 3,Oop,Apache Flex,Flex4,这里的情况很奇怪:因为声明为public的对象可以从一个方法“写入”,而不能从另一个方法写入 以下是一些代码部分: <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/fl
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:ns1="*"
xmlns:local="*"
minWidth="955" minHeight="600"
width="955" height="600"
creationComplete="init()"
currentState="Login" minHeight.pocetakPartije="1200" minWidth.pocetakPartije="1000">
...
<fx:Script>
<![CDATA[
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.navigateToURL;
import flash.utils.Timer;
public var obavestenja:Object;
private function init() :void
{
// ...
obavestenja = {korak10n: false, korak6o: false, korak8o: false, korak10o: false};
}
// ...
// this method changes it without issues ...
private function pingOKHandler(evt:ResultEvent):void
{
// ...
switch (stanjePartije.korak) {
case 0:
//deaktiviranje zetona
Alert.show('Deaktiviram zetone...');
deaktiviranjeZetona();
//na serveru smo promenili korak na 1
break;
//...
case 10:
//info o osnovnoj kocki odbrane
rezultatNapad.visible = true;
if (!obavestenja.korak10n) {
Alert.show('Branitelj je dobio...' + stanjePartije.osnovnaKockaOdbrana, "Alert",
Alert.OK, this,
obavestenOIshoduNListener, null, Alert.OK);
//rezultatOdbrana.visible = true;
//rezultatOdbrana.text ='Osnovna kocka odbrana:' + stanjePartije.osnovnaKockaOdbrana;
obavestenja.korak10n = true;
}
ExternalInterface.call('console.log', 'korak10n: ' + obavestenja.korak10n);
//promeniKorak(11);
break;
}
// ...
ExternalInterface.call('console.log','nema vise pinga!');
}
// this method cannot change "obavestenja" object
protected function promenaNapadacaNe_clickHandler(event:MouseEvent):void
{
//TODO Auto-generated method stub
ExternalInterface.call('console.log', 'promenaNapadacaNe: ' + stanjePartije.igracNaPotezu );
//stanjePartije.redniBroj++;
mitskiheroji.promenaNapadacaNe();
//promeniKorak(5);
promenaNapadacaPanel.visible = false;
obavestenja = {korak10n: false, korak6o: false, korak8o: false, korak10o: false};
}
<fx:Script>
...
<s:Button id="promenaNapadacaNe" x="253" y="35" label="Ne"
click="promenaNapadacaNe_clickHandler(event)"/>
...
...
这个对象不能从侦听器访问(即可写),而可以从其他方法访问(可写),这有什么特殊原因吗
谢谢您收到的实际错误消息是什么?假设上面所有的代码都在同一个类中,那么对象是公共/私有的,还是从一个方法或另一个方法访问,都与这个问题无关——应该允许所有的代码(如果所有的代码都在同一个类中)。没有语法错误。但是,
promenaapadacane\u clickHandler
方法无法将对象字段设置为false。也就是说,这个代码obavestenja={korak10n:false,korak6o:false,korak8o:false,korak10o:false}代码>对对象不做任何操作。所有内容都在同一个mxml文件中。所有代码都包含在同一个fx:script
标记中。我把代码的所有“重要”部分都放在这里了。不知道为什么我不能“重置”obavestenja
object。嗯,这没有意义,因为你没有理由不能做你想做的事情。您是否已验证正在执行单击处理程序(例如,面板的可见性是否发生变化?是否获得控制台输出?),或者重置对象后是否正在执行pingOKHandler()
方法?或者正在更新另一个对象?我认为这个问题与上面的问题类似(虽然没有我建议的简单问题那么明显)。我会使用调试器逐步检查代码,看看执行/更新了什么。例如,您可以检查obavestenja
对象并记下它的内存地址。然后,当单击处理程序运行时,在重置对象之前,查看是否引用了相同的对象。并查看重置对象后对象的外观,等等…谢谢-我从未使用过调试器,但它很有意义:)