2010-07-01 96 views
4

我有一个主要的应用程序(app.swf)加载一个模块(profiles.swf)和配置文件模块加载另一个模块(member_profile.swf)。在member_profile中,我从返回Member类型的对象的服务器端获取成员数据。返回的对象包含一个名为Jobs的数组,其中包含保存类型为MemberJob的对象。在member_profile模块中,有一个函数使用类型为MemberJob的参数来显示作业详细信息。我有一个循环,通过数组变回来,并呼吁像这样每个数组项功能:类型强制失败同一类

for(i = 0; i < member.Jobs.length; i++) 
    addJob(member.Jobs[i]); 

我得到的addJob行错误:

类型强制失败:不能转换组件。 classes :: MemberJob @ 19107d81到components.classes.MemberJob。

而且我总是在第二次加载member_profile模块时收到此错误。我的意思是这个模块被加载,当我点击配置文件模块中的成员的名字时,它通过这个名字作为子模块的参数来加载该成员的配置文件,包括他的作业。因此,如果我选择查看成员“X”的配置文件,则配置文件无任何错误地加载,但是如果我然后单击成员“Y”(这导致子模块用新参数重新加载),那么我得到类型强制错误。如果我先点击“Y”然后点击“X”,则会发生同样的情况,第二次加载时出错。

任何人都可以帮助我吗?

+0

你可以张贴addJob函数的代码..也许这个问题是存在的 – Treby 2010-07-01 01:26:19

+0

我假设Flash会在每次加载SWF时为'components.classes.MemberJob'注册一个新的定义。第二个定义虽然在内容上与第一个定义完全相同,但被视为与默认定义不同的类型,因此也是错误。这是一个错误,或者您在使用Flex模块时缺少一些编译参数以忽略重复的定义。我没有使用Flex模块,因此这只是一个假设。 – Amarghosh 2010-07-01 06:05:17

+0

我不认为问题是在addJob方法中,因为除了将作业对象的值分配给显示组件外,它什么也不做,它看起来像这样: public function addJob(mj:MemberJob):void {\t \t \t \t jobTitle.text = mj.JobTitle; jobDescription.text = mj.JobDescription; jobLocation.text = mj.JobLocation; //依此类推 } – Yasmine 2010-07-01 13:33:38

回答

9

重新阅读关于Module Domains的Flex帮助部分,并确保您已将components.classes::MemberJob类导入到正确的域中。

编辑:

尝试把你的主应用程序文件的地方下面,看看它是否有差别:

import components.classes.MemberJob; 
private var memberJob:MemberJob; 
+0

我不指定任何应用程序域时加载那么如何确保将MemberJob类导入到正确的域中? “模块域”部分的第一行显示“默认情况下,模块已加载到当前应用程序域的子域”,因此,我没有指定应用程序域,这意味着模块被加载到当前应用程序的子域中,对吗?只有一个模块使用这个类,所以我明白当它被加载时它拥有MemberJob的类定义。我弄错了所有这一切? – Yasmine 2010-07-04 10:27:38

+0

我放置了小鬼ort声明和主应用程序中的变量声明,它确实有所作为。现在没有错误。 但我不明白发生了什么? 有没有其他解决这个问题的方法,而不是在主应用程序中创建这个未使用的变量。主应用程序不需要任何东西的MemberJob类。 谢谢。 – Yasmine 2010-07-04 14:00:49

+0

请你解释一下这个解决方案是如何解决这个问题的? 这是否意味着,每当我有这个问题,我应该把主要应用程序中的导入语句和虚拟变量? 谢谢 – Yasmine 2010-07-05 07:51:20

相关问题