2011-06-05 70 views
0

我想加载一个模块并将其添加到一个名为“mod”的mx:box对象。在这里我的代码:Flex不能添加模块作为DisplayObject

var m:IModuleInfo = ModuleManager.getModule("modules/Module_Category.swf"); 
m.addEventListener(ModuleEvent.READY, function(e:Event):void 
{ 
    this.mod.addChild(m.factory.create() as DisplayObject); 
}); 
m.load(); 

的问题是,当我尝试添加它使用addChild Flex的告诉我,国防部在使用addChild

TypeError: Error #1010: A statement is not defined and has no propeties.

行是什么意思?

+0

这是一个编译时错误或运行时错误?什么是“this.mod”?它没有在您的代码示例中定义。 – JeffryHouser 2011-06-05 01:56:10

+0

realy编码器,只查找代码:D像我上面说的那样,“mod”就是一个简单的mx:box对象。它是一个运行时错误。编译器对它很好。 – masi 2011-06-05 09:54:39

+0

顺便说一句,我认为使用而不是会解决它,但我使用flex 4.1框架似乎没有(看起来像它的一部分4.5),所以我有使用旧的mx组件。 – masi 2011-06-05 09:56:41

回答

3

您的'此'范围不正确。你在匿名函数中使用'this'。在这个函数内部,'this'是指函数本身,而不是你可能瞄准的类。我无法看到你的课程的其余部分,但我可以看到'这个'范围没有'mod'属性,因此你的代码将会在那里失败。这就是为什么你得到'未定义'的错误:'this.mod'不存在。

我可以看到3级的解决方案(这取决于你的代码的其余部分的模样,但其中一人应满足您的需要):

  1. 只是删除“这一点。”。然后您的类成员'mod'将被正确引用。
  2. 将该匿名函数转换为类级函数。 '这个'然后将指向那个类,而不是函数。
  3. 在匿名函数之外为“this”创建一个别名。

一些代码会解释说,最后一个更好:

var myClass:MyClass = this; 
m.addEventListener(ModuleEvent.READY, function(e:Event):void 
{ 
    myClass.mod.addChild(m.factory.create() as DisplayObject); 
}); 
+0

谢谢m8,我fogot我使用anon。功能......难怪为什么它不工作。 – masi 2011-06-05 16:39:31

+0

在范围问题上的好答案,但不会使用最后一个问题。如果你打算这样做,不妨创建一个类功能。此外,我很好奇为什么masi不只是使用ModuleLoader。 – 2011-06-06 13:46:56

+0

@J_A_X我偶尔使用第三个选项,如果我需要访问类成员和局部变量。我会同意这不是很好的做法。 – RIAstar 2011-06-06 17:53:51