使用PHP填充多个Flex 4.5 ComboBox

Populating Multiple Flex 4.5 ComboBoxes using PHP

我已经四处搜寻,却找不到我问题的答案。使用Flex 4.5和PHP 5时,填充多个组合框的最佳方法是什么?

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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?)数据,以专门填充每个组合框。例如,我的数据行可能如下所示:

1
2
3
4
5
6
7
8
CODE    DESCR
------- -----------
Fruit   Apple  
Fruit   Orange
Drink   Soda
Drink   Water
Drink   Wine
Candy   Gummy Bears

如果在Flex中有某种方式,我可以(轻松地)将ArrayCollection转换为XML,并使用e4x使用诸如" ... lastResult [Food ='Fruit']"之类的东西填充dataProvider。

PHP是否以Flex lastResult将是XMLListCollection的方式返回XML(假设这就是我对e4x的需求)?

PHP是否已正确返回多维ArrayCollection,我可以在其中直接引用" Fruit"集合?有了这个问题,我尝试了以下PHP代码:

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

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

dataProvider =" ... lastResult.source.Fruit"

有没有更有效的方法?

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


请注意,我是Flex的白痴,但是如果我要这样做,我有一个ArrayCollection-好吧,其余的似乎很麻烦:每个组合框都有它自己的数据源;每个组合框都有它自己的数据源。初始化那些数据源(例如,使它们更加简单);遍历ArrayCollection,填充数据源(ArrayCollection列索引与每个数据源的数组索引之间的对应关系当然会非常容易)。至少在我看来,这是您可以做到的。尽管:(