使用PHP填充多个Flex 4.5 ComboBox

时间:2011-10-07 17:12:46

标签: php flex combobox

我四处寻找,但我找不到问题的答案。使用Flex 4.5和PHP 5时,填充多个Combobox的最佳方法是什么?

我正在开发一个Flex应用程序,在屏幕上显示大约20个组合框 - 每个组合显示不同的数据。我想在应用程序启动时立即填充所有组合框。我在Flex中使用了默认的“数据/服务”向导,它自动创建了一个将ArrayCollection返回给Flex的PHP。例如,下面是我使用的当前PHP函数,它填充每个ComboBox:

public function getListsByCODE($code) {

    $stmt = mysqli_prepare($this->connection, "SELECT a.IDCODE, a.CODE, a.DESCR, a.NOTES FROM DROPDOWN_VW a WHERE (a.CODE = ?)");
    $this->throwExceptionOnError();

    mysqli_stmt_bind_param($stmt, 's', $code);
    $this->throwExceptionOnError();

    mysqli_stmt_execute($stmt);
    $this->throwExceptionOnError();

    $rows = array();

    mysqli_stmt_bind_result($stmt, $row->IDCODE, $row->CODE, $row->DESCR, $row->NOTES);

    while (mysqli_stmt_fetch($stmt)) {
        $rows[] = $row;
        $row = new stdClass();
        mysqli_stmt_bind_result($stmt, $row->IDCODE, $row->CODE, $row->DESCR, $row->NOTES);
    }

    mysqli_stmt_free_result($stmt);
    mysqli_close($this->connection);

    return $rows;
}

这很好用......除了我必须从Flex提交20个调用 - 每个调用为每个组合框返回不同的数据 - 这会产生巨大的开销。

我在考虑从数据库中返回所有行(使用一次调用),然后使用Flex中的方法轻松解析(e4x?)数据以专门填充每个组合框。例如,我的数据行可能如下所示:

CODE    DESCR
------- -----------
Fruit   Apple   
Fruit   Orange
Drink   Soda
Drink   Water
Drink   Wine
Candy   Gummy Bears

如果在Flex中我可以(轻松地)将ArrayCollection转换为XML并使用e4x将dataProvider填充为“... lastResult [Food ='Fruit']”

让PHP以一种Flex lastResult为XMLListCollection的方式返回XML(假设这是我对e4x的需求)?

让PHP正确返回一个多维ArrayCollection,我可以直接引用“Fruit”集合吗?有了这个问题,我尝试了以下PHP代码:

我修改了“$ rows [] = $ row;”到“$ rows [$ rows-> CODE] [] = $ row;”在上面的代码中。

这看起来很有效 - PHP发送一个带有Fruit集合,Drink集合的ArrayCollection等等(我在Flex中使用'Test Operation'时看到了这一点) - 但是我得到了一个Flex错误(TypeError:Error#1034) :类型强制失败:尝试引用对象时无法将[] @ 143f1b29转换为mx.collections.IList:

的dataProvider = “... lastResult.source.Fruit”

有更有效的方法吗?

有人有什么想法吗?非常感谢你。

1 个答案:

答案 0 :(得分:0)

我是一个Flex白痴,请注意,但是如果我要这样做,并且我有一个ArrayCollection - 好吧,剩下的似乎是蛋糕:每个组合框都有它自己的数据源;初始化这些数据源(例如,它们的数组,以使其变得容易);迭代通过ArrayCollection,填充数据源(ArrayCollection列索引与每个数据源的数组索引之间的对应关系,当然,这将使这很容易)。至少在我看来,你是如何做到的。可能这种反应太迟了:(