這是從this one一個跟進的問題,我不想保持在評論中去,並阻止人們獲得來之不易的聲譽... :)爲什麼我的對象在試圖從ActionScript引用mx:Canvas時引用null?
在我的凱恩戈姆命令類,得到它編譯我需要告訴它是什麼myCanvas,所以我用這條線:
var myCanvas : MyCanvas = new MyCanvas;
我猜這是錯誤的,但是,因爲雖然它編譯,如果我嘗試做這樣的事情:
if (myCanvas.subObject.value == 0) { ... }
它會扔th是錯誤:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at com.foo.bar.command::MyCommand/execute()
就好像子對象不存在一樣。它看起來像我可能會得到一個MyCanvas的新實例,而不是我想從main.mxml中獲取的實例,其ID爲myCanvas。我對嗎?我該如何解決?
編輯(格林尼治標準時間下午10:59 + 1):好吧,所以看起來我在這裏一直過於模糊。這裏是我的main.mxml
:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:control="com.foo.bar.control.*"
xmlns:business="com.foo.bar.business.*"
xmlns:view="com.foo.bar.view.*"
applicationComplete="com.foo.bar.util.StartupUtil.init()"
horizontalScrollPolicy="off"
verticalScrollPolicy="off"
borderThickness="0"
paddingBottom="0"
paddingLeft="0"
paddingTop="0"
paddingRight="0"
>
<mx:Script>
<![CDATA[
import com.foo.bar.model.PlayerModelLocator;
[Bindable]
private var model : PlayerModelLocator = PlayerModelLocator.getInstance();
]]>
</mx:Script>
<!-- ========================================================================== -->
<!-- the ServiceLocator where we specify the remote services -->
<business:Services id="services" />
<!-- the FrontController, containing Commands specific to this application -->
<control:PlayerController id="controller" />
<!-- ========================================================================== -->
<mx:Style source="assets/main.css" />
<view:MyCanvas id="myCanvas" />
</mx:Application>
這是我的com/foo/bar/command/MyCommand.as
:
package com.foo.bar.command {
/* add to controller
addCommand(MyEvent.EVENT_CHANGE_VOLUME, ChangeVolumeCommand);
*/
import flash.net.SharedObject;
import com.adobe.cairngorm.control.CairngormEvent;
import com.adobe.cairngorm.commands.ICommand;
import com.foo.bar.model.PlayerModelLocator;
import com.foo.bar.event.MyEvent;
import com.foo.bar.view.*;
public class ChangeVolumeCommand implements ICommand {
public function execute(event:CairngormEvent):void {
var model : PlayerModelLocator = PlayerModelLocator.getInstance();
var myEvent : MyEvent = MyEvent(event);
var myCanvas : MyCanvas = new MyCanvas();
var so:SharedObject = SharedObject.getLocal("fixie.video");
if (myCanvas.subObject.value == 0) {
trace("subobject value is 0");
}
}
}
}
基本上,我想用myCanvas
對象來獲得ID myCanvas
對象上的手柄main.mxml
在MyCommand.as
顯示代碼plz !!! – Eugene 2010-08-31 20:51:06