![]() |
|
||||||||||
|
|||||
|
Регистрация: Jan 2004
Адрес: Kazakhstan, Almaty
Сообщений: 5
|
Добрый день,
Вопрос следующий: Есть HTTPService с id="srv", которому по GET приходят xml-данные e4x. Есть Grid, в который можно прописать в dataProvider = '{srv.lastResult.root.node}' и все в гриде будет отображаться. Теперь же мне нужно измененные в гриде данные отправить обратно на сервер. И еще сделать так, чтобы dataProvider = ссылался не на srv.***, а на, скажем, функцию типа гет, которая возвращает svr.lastResult.root.node. Т.е. dataProvider = '{varXML}', где varXML имеет вид Так вообще можно сделать? Когда в dataProvider стоит {srv.lastResult.root.node}, то после запроса данных они появляются в гриде. Когда же там прописана функция типа гет varXML, то ничего не появляется после отрабатывания запроса. Т.е. dataProvider не запрашивает данные у varXML, но HTTPService через .lastResult как-то обновляет себя в dataProvider={svr.lastResult}. Как это можно реализовать? Цель заключается в следующем: создать объект, который взаимодействует с серверными xml, реализует в себе методы open,post, и который можно использовать повторно, а не создавать каждый раз отдельно HTTPService, request, xml, прописывать логику и т.д. Фактически необходим объект, в который параметром приходило бы название xml-ки, допустим, а на выходе получали провайдер, который можно использовать в качестве dataProvider грида или других элементов. При этом все изменения произведенные над ним можно запостить, непосредственно обратившись к объекту. Прошу простить, если выразил мысль невнятно. Может я не знаю основ flex, но дни поиска в интернете пока ничего не дали. |
|
|||||
|
[+1 04.05.08]
Регистрация: May 2008
Адрес: Czech, Prague
Сообщений: 65
|
Цитата:
На сервере беру данные из таблицы, заварачиваю их в XML и добовляю к каждой строке XML элемент <select>false</select> Например: <table_user>
<item>
<id>1</id>
<select>false</select>
<name>Mike</name>
<phon>03</phon>
</item>
<item>
<id>2</id>
<select>false</select>
<name>Dude</name>
<phon>03</phon>
</item>
</table_user>
отдаю всё это клиенту. 3) У клиента отображаю всё в DataGrid 4) Вешаю событие на редактирование. Как только что-то изменится в гриде, меняю в XML'ле поле: <select>true<select> 5) Посылаю на сервер всё, что <select>true<select> и сохраняю в БД. ЗЫ: Если в гриде есть CheckBox'сы, то можно без поля <select>true<select> Просто будешь смотреть выделенные items и их посылать на сервер. ЗЫ2: Можно не париться с XML'ем, а просто использовать RemoteObject. Мой любимый вариант. Последний раз редактировалось Foli; 14.02.2009 в 02:09. |
|
|||||
|
Регистрация: Jan 2004
Адрес: Kazakhstan, Almaty
Сообщений: 5
|
А как послать данные (т.е. именно как и во что их обернуть, чтобы в <request> HTTPService'а послать эти данные? И как именно реализован прием во flex xml? Т.е. создается отдельно переменная XML, XMLList, которые потом заполняются, как производится запрос? Через HTTPService?
Как реализовать закомментированные вопросы ниже по коду? <mx:HTTPService id="srv" url="test.xml" method="GET" result = "testXML = XML(srv.lastResult.rootnode.node)">
<mx:request xmlns="">
{testXML} <!-- Здесь должен отправляться XML переменной testXML. Как? -->
</mx:request>
</mx:HTTPService>
<!-- Ниже после запроса testXML данные должны появляться в гриде. Но их нету, хотя в переменную testXML они заносятся -->
<!-- Если написать вместо {testXML} {srv.lastResult.rootnode.node}, то все будет ок. -->
<mx: DataGrid id="grid" dataProvider="{testXML}" width="100%" height="100%" editable="true">
<mx:columns>
<mx: DataGridColumn dataField="Enterprise_ID" headerText="Product Id" editable="false"/>
<mx: DataGridColumn dataField="Name" headerText="Name" editable="true"/>
<mx: DataGridColumn dataField="Full_Name" headerText="Price" textAlign="right" editable="true"/>
<mx: DataGridColumn dataField="Type_ID" headerText="Qty" textAlign="right" editable="true"/>
</mx:columns>
</mx: DataGrid>
Последний раз редактировалось Terricks; 14.02.2009 в 12:43. |
|
|||||
|
[+1 04.05.08]
Регистрация: May 2008
Адрес: Czech, Prague
Сообщений: 65
|
Цитата:
Смотри, 1) Тебе надо создать HTTPService и повесить событие для получения результата. Вешаем: <mx:HTTPService
id="httpServ"
url="http://localhost:8080/servlet/myservlet"
resultFormat="e4x"
result="resultHandler(event)"/>
При получении ответа от сервера в resultHandler(event) обрабатываешь его. Обрабатываем: [Bindable]
public var myXML:XML;
private function resultHandler(event:ResultEvent):void
{
//получили XML
myXML = event.result as XML;
//теперь скормим его нашему DataGrid'у
this.myDataGrid.dataProvider = myXML.имя элемента в myXML
}
Теперь, что касается посылки данных. Я не знаю, кто у тебя на сервере всё это дело обрабатывает. Ты плохо описал серверную часть. Но у меня всё в Java. 2) Создаёшь объект, в который нужно положить свои данные для отправки. Создаём: public function sendYourData():void
{
//[1]
var obj:Object = {};
obj["id"] = “11”;
obj["name"] = “junior”;
obj["phone"] = “03”;
obj["note"] = “I'm not over!”;
//[2] послали на сервер.
httpServ.send(obj);
На сервере сервлет обработает полученные данные. ![]() |
|
|||||
|
Регистрация: Jan 2004
Адрес: Kazakhstan, Almaty
Сообщений: 5
|
Foli, большое спасибо, буду разбираться!
P.S. Серверная часть выполнена в Delphi, используя компонент Indy idHTTPServer, т.к. уже существует сервер приложений, который организует доступ к данным, и он, в свою очередь, должен предоставлять их через веб. P.P.S. Еще раз огромное спасибо! |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:02. |
|
|
« Предыдущая тема | Следующая тема » |
|
|