Как отправить массив флажков Flex на сервер MySQL? - PullRequest
0 голосов
/ 26 июля 2011

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

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

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

Iесть немного сложный скрипт flex, 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 = ID вновь вставленного лица.

Как видно из приведенного выше кода 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.
  }
 }
}

[Редактировать] Я использую флажок s: и яне имеют свойства данных.mx: Checkbox работает, но я не могу использовать компонент mx: Checkbox в моем проекте.

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

Ответы [ 2 ]

0 голосов
/ 28 июля 2011

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

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

<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.

0 голосов
/ 27 июля 2011

попробуйте связать выбранное свойство с вашим 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.
  }

}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...