【问题标题】:Weird problem with a custom bindable class and a vector自定义可绑定类和向量的奇怪问题
【发布时间】:2010-07-07 15:32:08
【问题描述】:

我的应用程序中的向量有一个非常奇怪的问题。

详情...

我有以下课程。

人,玩家,玩家控制器。

玩家扩展人。 Person 扩展 ObjectProxy 以启用绑定。 所以 Player 类有 [Bindable] 标签。

PlayerController 类包含一个远程对象,它调用 php 方法来接收名字和姓氏,当 CallResponder 从调用中获取结果时,结果处理程序会创建一个 Player 实例。那时我正试图将播放器对象推入 Vector..

问题如下。

每次调用 push 方法时,向量都会被最后一个创建的玩家填充,但不仅仅是在向量的末尾。它也取代了其他实例!所以向量总是包含最近的玩家实例,但在它的每个位置。 :S

我也试过用数组做,结果是一样的。

对我做错了什么有什么想法吗?这让我疯狂。 :S

【问题讨论】:

    标签: apache-flex class vector actionscript-3


    【解决方案1】:

    我的猜测是,在将引用设置为 Player 的新实例之后,您将相同的对象引用推送到向量中,这意味着向量中的所有项目都引用同一个对象,该对象始终是最新的对象。我说“猜测”是因为我还没有看到你的代码。你在你的向量中推什么,一个局部变量?成员变量?

    编辑:根据您在下面的评论,尝试使用局部变量而不是从您的成员变量 (player_) 将新的 Player 对象添加到您的向量中:

    var newPlayer:Player = new Player();
    newPlayer.firstName = results[firstName];
    newPlayer.lastName = results[lastName];
    players_.push(newPlayer);
    player_ = newPlayer;
    

    您正在做我怀疑的事情,即将对同一对象的多个引用添加到您的向量中。由于对象中的所有引用都引用同一个对象,因此更改一个对象会更改向量中的所有条目。每次添加到矢量时,执行上述操作都会创建一个全新(且唯一)的 Player 对象。

    【讨论】:

    • 播放器实例是 PlayerController 类中的私有变量。我尝试将其推送到类内的私有向量并得到奇怪的结果。我也尝试将它推入包含控制器的组件上的向量中,并且发生了同样的情况。所以结果处理程序中的代码看起来像这样 player_.firstName = results[firstName]; player_.lastName = 结果[姓氏];玩家_.push(玩家_);我在做我不应该做的事吗?还是我错过了什么? :S
    • 感激不尽!您使我免于麻烦,因为我在过去的 3-4 天内一直在寻找答案,但我无法弄清楚。就在您编辑答案时,我考虑过在函数中创建一个新对象。 :D
    • 太好了,很高兴我能帮上忙!请随意支持我的答案,以便它适用于我的声誉,谢谢。 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    相关资源
    最近更新 更多