gpt4 book ai didi

apache-flex - Flex DropdownList CreationComplete 错误

转载 作者:行者123 更新时间:2023-12-04 06:46:40 25 4
gpt4 key购买 nike

我有一个显示提供者列表的 DropdownList,并且必须选择与该患者关联的提供者。

下拉列表:

<s:DropDownList id="providerList"
width="80%"
fontSize="12"
fontWeight="bold"
selectionColor="white"
creationComplete="providerList_creationCompleteHandler(event)"
dataProvider="{model.practiceProviderList.practiceProviders}"/>

其中 practiceProviders 是一个 ArrayCollection

CreationCompleteHandler 函数:
protected function providerList_creationCompleteHandler(event:FlexEvent):void
{
var firstN:String;
var lastN:String;
var providerObj:Provider = new Provider();

if (model.patientDetails.patientDetail.patientProviders != null && model.patientDetails.patientDetail.patientProviders.length > 0)
{
firstN = patientDetailsModel.patientDetails.patientDetail.patientProviders.getItemAt(0).provider.providerName.firstName;
lastN = patientDetailsModel.patientDetails.patientDetail.patientProviders.getItemAt(0).provider.providerName.lastName;

for (var count:int = 0; count < patientDetailsModel.practiceProviderList.practiceProviders.length; ++count)
{
providerObj = patientDetailsModel.practiceProviderList.practiceProviders.getItemAt(count, 0).provider as Provider;

if (providerObj.providerName.firstName == firstN && providerObj.providerName.lastName == lastN)
{
this.providerList.selectedIndex = count;
}
}
}
}

问题是当我第一次进入这个页面时,错误是:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at com.newwavetechnologies.modules::demographics/providerList_creationCompleteHandler()[C:\harish\flex\apps\workspace\dataCollection-flexUserInterface\src\com\newwavetechnologies\modules\demographics.mxml:166]
at com.newwavetechnologies.modules::demographics/__providerList_creationComplete()[C:\harish\flex\apps\workspace\dataCollection-flexUserInterface\src\com\newwavetechnologies\modules\demographics.mxml:359]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\core\UIComponent.as:12266]
at mx.core::UIComponent/set initialized()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\core\UIComponent.as:1577]
at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:759]
at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1072]

其中第 166 行是:
if (providerObj.providerName.firstName == firstN && providerObj.providerName.lastName == lastN)

providerObj 第一次为空。但是当回击并再次回到同一页面时,一切正常,并且列表中的 1 个提供者被正确选择。

可能我认为第一次,在填充 List 之前调用了 creationComplete 处理程序方法。第二次调用时,列表被填充并且处理程序工作正常。如果有人能在这方面帮助我解决这个问题,那就太好了。

谢谢

哈里什

最佳答案

很难说这里发生了什么,但问题就出在这里:

providerObj = patientDetailsModel.practiceProviderList.practiceProviders.getItemAt(count, 0).provider as Provider;

该行中有很多地方可能会发生空指针异常。

最有可能的 - practiceProvider返回位置 count没有提供程序集。我们看不到这个值是如何填充的,但鉴于此代码稍后起作用,我会说您已经发生了竞争条件 - 在设置数据之前正在访问数据。

至少,您应该为此添加一个guardClause:
var practiceProviders:ArrayCollection = patientDetailsModel.practiceProviderList.practiceProviders;
for (var count:int = 0; count < practiceProviders.length; ++count)
{
providerObj = practiceProviders.getItemAt(count, 0).provider as Provider;
if (!providerObj)
continue;
// etc
}

考虑到 flex 服务器调用的异步性质,竞争条件有点棘手。 (我假设您正在从远程服务器加载数据)。

有两种方法可以解决这个问题 - 要么
  • 推迟此方法的执行,直到数据加载完毕 - 您可以通过向 ResultEvent 添加一个 eventListener 来做到这一点。远程服务

  • 或者
  • 第一次不用担心,只要数据发生变化就重新执行该方法。

  • 例如:
    protected function providerList_creationCompleteHandler(event:FlexEvent):void
    {
    dataProvider.addEventListener(CollectionEvent.COLLECTION_CHANGE,onCollectionChange,false,0,true);
    updateProviders();
    // Rest of existing creationComplete code moved to updateProviders();
    }
    private function updateProviders()
    {
    // Code from existing creationComplete handler goes here
    }
    private function onCollectionChange(event:CollectionEvent):void
    {
    updateProviders();
    }

    关于apache-flex - Flex DropdownList CreationComplete 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3669649/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com