Как отправить массив флажков Flex на сервер mysql?

Я использую FB для PHP 4.5, ZendAMF, и я читал, что мне не нужно использовать HTTPService для того, что я хочу делать.

Структура таблицы:

people: {pID, pName} departments: {deptID, deptName} people_departments: {pID, deptName} 

У меня немного сложный гибкий скрипт, People.mxml. В состоянии PersonAdd у меня есть форма, которая будет использоваться для отправки данных на сервер mysql. В этой форме у меня есть ретранслятор, который создаст флажок для каждого отдела в моей базе данных. Когда я нажимаю кнопку «Добавить», я хочу вставить данные в таблицы people и people_departments .

Код повторителя:

 <mx:HBox> <mx:Repeater id="checkBoxRepeater" dataProvider="{getDepartmentsResult.lastResult}"> <s:CheckBox id="deptCB" label="{checkBoxRepeater.currentItem.deptName}"/> </mx:Repeater> </mx:HBox> 

В моем файле peopleService.php у меня будет функция createPerson(People $item,$deptArray) и внутри этой функции я буду выполнять два SQL-запроса. Один запрос будет вставлять данные в таблицу People, а другой будет вставлять данные в people_departments, с people_departments.pID = идентификатор вновь вставленного человека.

Как вы можете видеть, в приведенном выше коде Repeater флажок установлен как метка атрибута. Однако, когда я отправляю dept_Array (типа ArrayCollection) на сервер, первый должен содержать deptID. Как я могу это сделать?

Вот как я создаю dept_Array в People.mxml для отправки на сервер:

 protected function button_clickHandler(event:MouseEvent):void { var dept_array:Array=[]; var idx:int; var getDepts_array:ArrayCollection=new ArrayCollection; getDepts_array=getDepartmentsResult.lastResult as ArrayCollection; var len:int=getDepts_array.length; for (idx=0; idx < len; idx++) { if (deptCB[idx].selected) { dept_array.push(deptCB[idx].label); //here I need to be able to push the ID of selected department. } } } 

[Edit] Я использую s: Checkbox, и у меня нет свойства data. mx: Checkbox, но я не могу использовать компонент mx: Checkbox в моем проекте.

Буду признателен за любую помощь. Кроме того, есть ли лучший способ сделать это?

попробуйте связать выбранное свойство с вашим getDepartmentsResult, чтобы сохранить выбранное состояние:

 <mx:HBox> <mx:Repeater id="checkBoxRepeater" dataProvider="{getDepartmentsResult.lastResult}"> <s:CheckBox id="deptCB" label="{checkBoxRepeater.currentItem.deptName}" selected={checkBoxRepeater.currentItem.deptSelected}/> </mx:Repeater> </mx:HBox> 

После этого перейдите в свою коллекцию, чтобы получить выбранный отдел:

 protected function button_clickHandler(event:MouseEvent):void { var dept_array:Array=[]; var idx:int; var getDepts_array:ArrayCollection=new ArrayCollection; getDepts_array=getDepartmentsResult.lastResult as ArrayCollection; var len:int=getDepts_array.length; for each (var dept:Object in getDepts_array) { // ... } if (dept.selected) { dept_array.push(dept.label); //here I need to be able to push the ID of selected department. } 

}}

Я решил проблему, используя атрибут automationName для отправки идентификатора, связанного с именем item, отображаемым как метка флажка.

Обратите внимание, что атрибут data не существует для флажка искры. Если вы используете флажок mx: Checkbox, у вас есть данные, и вы можете использовать его для отправки идентификатора, связанного с вашим предметом.

 <mx:Tile id="myTile"> <mx:Repeater id="checkBoxRepeater" dataProvider="{getItemsResult.lastResult}" startingIndex="0"> <s:CheckBox label="{checkBoxRepeater.currentItem.myItemName}" id="checkbox" automationName="{String(checkBoxRepeater.currentItem.myItemID)}" change="checkbox_changeHandler(event,event.currentTarget.repeaterIndex)"/>^ </mx:Repeater> </mx:Tile> 

Я знаю, что это не может быть лучшим решением, но я, по-видимому, первый человек, выполняющий эту обычную задачу, и это сработало для меня.

И затем, отправьте массив идентификаторов выбранных флажков, я использую следующий код, определенный в моей функции submitBtn_clickHandler:

 var items_array:Array=[]; var idx:int; var getitems_array:ArrayCollection=new ArrayCollection; getitems_array=getItemsResult.lastResult as ArrayCollection; var len:int=getitems_array.length; for (idx=0; idx < len; idx++) { var element:CheckBox=myTile.getElementAt(idx) as CheckBox; if (element.selected) { items_array.push(element.automationName); } } 

Затем я items_array в качестве дополнительного параметра в функцию ItemService.createItem.