Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.02.2009, 15:42
Terricks вне форума Посмотреть профиль Отправить личное сообщение для Terricks Найти все сообщения от Terricks
  № 1  
Ответить с цитированием
Terricks

Регистрация: Jan 2004
Адрес: Kazakhstan, Almaty
Сообщений: 5
По умолчанию Flex XML Data Editing

Добрый день,

Вопрос следующий:
Есть HTTPService с id="srv", которому по GET приходят xml-данные e4x.
Есть Grid, в который можно прописать в dataProvider = '{srv.lastResult.root.node}' и все в гриде будет отображаться.

Теперь же мне нужно измененные в гриде данные отправить обратно на сервер. И еще сделать так, чтобы dataProvider = ссылался не на srv.***, а на, скажем, функцию типа гет, которая возвращает svr.lastResult.root.node. Т.е. dataProvider = '{varXML}', где varXML имеет вид
Код:
private function get varXML()
{
    return srv.lastResult.root.node;
}
Так вообще можно сделать? Когда в dataProvider стоит {srv.lastResult.root.node}, то после запроса данных они появляются в гриде. Когда же там прописана функция типа гет varXML, то ничего не появляется после отрабатывания запроса. Т.е. dataProvider не запрашивает данные у varXML, но HTTPService через .lastResult как-то обновляет себя в dataProvider={svr.lastResult}. Как это можно реализовать? Цель заключается в следующем: создать объект, который взаимодействует с серверными xml, реализует в себе методы open,post, и который можно использовать повторно, а не создавать каждый раз отдельно HTTPService, request, xml, прописывать логику и т.д. Фактически необходим объект, в который параметром приходило бы название xml-ки, допустим, а на выходе получали провайдер, который можно использовать в качестве dataProvider грида или других элементов. При этом все изменения произведенные над ним можно запостить, непосредственно обратившись к объекту.

Прошу простить, если выразил мысль невнятно. Может я не знаю основ flex, но дни поиска в интернете пока ничего не дали.

Старый 13.02.2009, 22:38
Foli вне форума Посмотреть профиль Отправить личное сообщение для Foli Найти все сообщения от Foli
  № 2  
Ответить с цитированием
Foli
[+1 04.05.08]

Регистрация: May 2008
Адрес: Czech, Prague
Сообщений: 65
Цитата:
Сообщение от Terricks Посмотреть сообщение
Теперь же мне нужно измененные в гриде данные отправить обратно на сервер.
1)
На сервере беру данные из таблицы, заварачиваю их в 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>
2)
отдаю всё это клиенту.

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.
Старый 14.02.2009, 12:12
Terricks вне форума Посмотреть профиль Отправить личное сообщение для Terricks Найти все сообщения от Terricks
  № 3  
Ответить с цитированием
Terricks

Регистрация: Jan 2004
Адрес: Kazakhstan, Almaty
Сообщений: 5
Цитата:
Сообщение от Foli Посмотреть сообщение
5)
Посылаю на сервер всё, что <select>true<select> и сохраняю в БД.
А как послать данные (т.е. именно как и во что их обернуть, чтобы в <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.
Старый 14.02.2009, 14:19
Foli вне форума Посмотреть профиль Отправить личное сообщение для Foli Найти все сообщения от Foli
  № 4  
Ответить с цитированием
Foli
[+1 04.05.08]

Регистрация: May 2008
Адрес: Czech, Prague
Сообщений: 65
Цитата:
Сообщение от Terricks
чтобы dataProvider = ссылался не на srv.***, а на, скажем, функцию типа гет, которая возвращает svr.lastResult.root.node. Т.е. dataProvider = '{varXML}',
Так вообще можно сделать?
Ты как-то не правильно делаешь. Не красиво и сбивает с логики.
Смотри,
1)
Тебе надо создать HTTPService и повесить событие для получения результата. Вешаем:

Код:
<mx:HTTPService
         id="httpServ" 
         url="http://localhost:8080/servlet/myservlet" 
         resultFormat="e4x" 
         result="resultHandler(event)"/>
2)
При получении ответа от сервера в 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);
3)
На сервере сервлет обработает полученные данные.


Старый 14.02.2009, 21:05
Terricks вне форума Посмотреть профиль Отправить личное сообщение для Terricks Найти все сообщения от Terricks
  № 5  
Ответить с цитированием
Terricks

Регистрация: Jan 2004
Адрес: Kazakhstan, Almaty
Сообщений: 5
Foli, большое спасибо, буду разбираться!
P.S. Серверная часть выполнена в Delphi, используя компонент Indy idHTTPServer, т.к. уже существует сервер приложений, который организует доступ к данным, и он, в свою очередь, должен предоставлять их через веб.
P.P.S. Еще раз огромное спасибо!

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 10:02.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.