Модераторы: SoWa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> combobox и xml 
:(
    Опции темы
locust19
Дата 30.11.2009, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 25.11.2009

Репутация: нет
Всего: нет



не могу из xml такого вида


Код

<statistic>
<provider id="O2">
  <vertragsart>Neue Kunde</vertragsart>
  <tarif>1000 O2</tarif>
</provider>
<provider id="VF">
  <vertragsart>Neue Kunde</vertragsart>
  <tarif>1000 VF</tarif>
</provider>
</statistic>



доставать динамически нужные поля в combobox, к примеру по провайдеру О2 высветить его договоры...

Код

<mx:Label x="451" y="32" text="Provider:"/>
        <mx:ComboBox id="comboprovider" x="530" y="56" id="provider" dataProvider="{testInfo2}"/>
        
        <mx:Label x="451" y="58" text="Vertragsart:"/>
        <mx:ComboBox x="530" y="30" id="vertragsart" dataChange="{testInfo2}"/>
        
        <mx:Label x="451" y="84" text="Tarif:"/>
        <mx:ComboBox x="530" y="82" id="tarif" />
        
        <mx:Label x="451" y="110" text="oder:"/>
        <mx:TextArea x="530" y="109" height="19" id="oder"/>

PM MAIL   Вверх
SoWa
Дата 1.12.2009, 07:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 2
Всего: 74



А где код, формирующий dataProvider?


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
locust19
Дата 1.12.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 25.11.2009

Репутация: нет
Всего: нет



Код

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initVars()" layout="absolute" 
    backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#CCCCCC, #CCCCCC]">
    <mx:Script>
        <![CDATA[
        [Bindable]private var testInfo2:XMLList;
        private function xmlHandler2(evt:ResultEvent):void
        {
            //Sets testInfo's root as the student. Everything else referenced in respect to this.
            testInfo2 = evt.result.provider;
        }
        ]]>
    </mx:Script>
 
<mx:HTTPService url="tmpl/statistics/flex/api.php" id="testData" useProxy="false" method="POST" result="xmlHandler2(event)" resultFormat="e4x">
        <mx:request xmlns="">
           <statisticMa>{statisticMa}</statisticMa>
           <time>{time}</time>
        </mx:request>
</mx:HTTPService>
 
<mx:Label x="451" y="32" text="Provider:"/>
        <mx:ComboBox id="comboprovider" x="530" y="56" id="provider" dataProvider="{testInfo2}"/>
 
        <mx:Label x="451" y="58" text="Vertragsart:"/>
        <mx:ComboBox x="530" y="30" id="vertragsart" dataChange="{testInfo2}"/>
 
        <mx:Label x="451" y="84" text="Tarif:"/>
        <mx:ComboBox x="530" y="82" id="tarif" />
 
        <mx:Label x="451" y="110" text="oder:"/>
        <mx:TextArea x="530" y="109" height="19" id="oder"/>
 
</mx:Application>


Это сообщение отредактировал(а) locust19 - 1.12.2009, 11:25
PM MAIL   Вверх
SoWa
Дата 1.12.2009, 11:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 2
Всего: 74



Ох, домой приду- погоняю твой код.
Но кажется только сейчас понял чего именно тебе надо:
На каждом комбобоксе похоже придется повесить функцию обработчик, чтобы рожала dataProvider уровнем ниже и передавала его следующему комбобоксу.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
locust19
Дата 1.12.2009, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 25.11.2009

Репутация: нет
Всего: нет



да.. чтобы при выборе скажем страны. в другой колонке были города в следующей жители... направь сейчас на какие нибудь ужасные слова которые смогут помочь

а функцию.. охохо

Это сообщение отредактировал(а) locust19 - 1.12.2009, 11:23
PM MAIL   Вверх
SoWa
Дата 1.12.2009, 12:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 2
Всего: 74



Дак она не страшная будет ) Освобожусь- напишу.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
locust19
Дата 1.12.2009, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 25.11.2009

Репутация: нет
Всего: нет



облегчил код


PHP послыает в виде XML влэшу.. флэш должен рапределять поля

провайдер: O2
имеет следующие свойства
договор: новый клиент, смена договора...
тарифы: европа, интернет...

так же есть другой провайдер
провайдер: VF
имеет следующие свойства
договор: новый клиент, смена договора.(допустим тут еще есть обьеденение договора на нескольких персон)
тарифы: UMTS, SIM..

дочерние списки должны распределиться по провайдеру
Код

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
    backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#CCCCCC, #CCCCCC]">

    <mx:XMLList id="dpFlat">
    <provider providerID="O2" vertragsart="Neue Kunde" tarif="1000 O2"/>
    <provider providerID="VF" vertragsart="Neue Kunde" tarif="1000 VF"/>
    </mx:XMLList>

        <mx:Label x="451" y="32" text="Provider: "/>
        <mx:ComboBox id="provider" x="530" y="30" dataProvider="{dpFlat}" labelField="@providerID"/>
        
        <mx:Label x="451" y="58" text="Vertragsart: "/>
        <mx:ComboBox id="vertragsart" x="530" y="56" dataProvider="{dpFlat}" labelField="@vertragsart"/>
        
        <mx:Label x="451" y="84" text="Tarif: "/>
        <mx:ComboBox id="tarif" x="528.5" y="82" dataProvider="{dpFlat}" labelField="@tarif"/>
</mx:Application>


Это сообщение отредактировал(а) locust19 - 1.12.2009, 18:48
PM MAIL   Вверх
locust19
Дата 1.12.2009, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 25.11.2009

Репутация: нет
Всего: нет



Спасибо SoWa за отзывчивость, нашел было AdvancedDataGrid, GroupingCollection. поработал с ними и не то выходит, жду недождусь функций, т.к. с таковыми я еще не имел дела, а примеров найти не выходит!

Это сообщение отредактировал(а) locust19 - 1.12.2009, 17:34
PM MAIL   Вверх
SoWa
Дата 1.12.2009, 19:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 2
Всего: 74



Цитата(locust19 @  1.12.2009,  10:53 Найти цитируемый пост)
        <![CDATA[        [Bindable]private var testInfo2:XMLList;        private function xmlHandler2(evt:ResultEvent):void        {            //Sets testInfo's root as the student. Everything else referenced in respect to this.            testInfo2 = evt.result.provider;        }        ]]>

Паехали.
Вот это- функция. Она вызывается когда тебе ХТТПКоннекшн отдает ХМЛ.
И эта функция создает вот такую переменную:
Код

[Bindable]private var testInfo2:XMLList;

Она, собственно, и используется как дата-провайдер в комбобоксе. Хотя я тебе её советую сделать public. Так нам будет лучше в дальнейшем.
Вот у этого комбобокса есть событие change. В него мы и будем писать функцию.
Код

public function nextProvider(): XMLList {
var retval:XMLList = new XMLList();
retval = testInfo2. //Опа-па... Сам оказывается ни разу не сталкивался с этой проблемой. В общем, тут надо что-то типа getChildsByName(myBox.text). Т.е. выдрать все дочерние элементы из узла.
return retval;
}

Но еще надо приписать комбобоксу id="myBox"

Это сообщение отредактировал(а) SoWa - 1.12.2009, 19:59


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
locust19
  Дата 14.12.2009, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 25.11.2009

Репутация: нет
Всего: нет



чтото не выходит.

 trace(Working with XML in Flex 3 and Java) должно было бы работать. но   smile я не могу соединить воединно и нормально попарсить на массивы

Это сообщение отредактировал(а) locust19 - 14.12.2009, 13:54
PM MAIL   Вверх
chaos
Дата 14.12.2009, 13:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



locust19, я не совсем понял что тебе нужно и в чем собсна проблема smile

вот те пища для ума smile
Код

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">


    <mx:Script>
        <![CDATA[
            [Bindable]
            public var xmlData:XML =
                    <content>
                        <operator name="Megafon">
                            <region name="MSK">
                                <text>Жили были</text>
                            </region>
                            <region name="SPB">
                                <text>дед да бабка</text>
                            </region>
                            <region name="EKB">
                                <text>Была у них курица Рябка</text>
                            </region>
                        </operator>

                        <operator name="Beeline">
                            <region name="MSK">
                                <text>Всегда несла она простые яйца</text>
                            </region>
                            <region name="USA">
                                <text>А тут, как на грех,</text>
                            </region>
                        </operator>

                        <operator name="Utel">
                            <region name="LALALA">
                                <text>блин мутировала</text>
                            </region>
                        </operator>
                        
                        <operator name="MTS">
                            <region name="BLABLABLA">
                                <text>и снесла золотое</text>
                            </region>
                        </operator>
                    </content>;
        ]]>
    </mx:Script>
    <mx:ComboBox id="operators" x="30" y="39"
            dataProvider="{xmlData.operator}" labelField="@name"/>
    <mx:ComboBox id="regions" x="30" y="87"
            dataProvider="{operators.selectedItem.region}" labelField="@name"/>
    <mx:TextArea x="30" y="131" width="243" height="83" text="{regions.selectedItem.text}"/>
    
</mx:WindowedApplication>



то не то?
PM WWW   Вверх
locust19
Дата 14.12.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 25.11.2009

Репутация: нет
Всего: нет



я на этом месте уже топтался)

вот что выходит

Код

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
    backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#CCCCCC, #CCCCCC]">

    <mx:XMLList id="dpFlat">
<provider providerID="O2" vertragsart="Neue Kunde" tarif="1000 O2"/><provider providerID="VF" vertragsart="Neue Kunde" tarif="1000 VF"/><provider providerID="VF" vertragsart="VVL" tarif="1000 VF"/><provider providerID="VF" vertragsart="Neue Kunde" tarif="3000 VF"/>
    </mx:XMLList>

        <mx:Label x="451" y="32" text="Provider: "/>
        <mx:ComboBox id="provider" x="530" y="30" dataProvider="{dpFlat}" labelField="@providerID"/>
        
        <mx:Label x="451" y="58" text="Vertragsart: "/>
        <mx:ComboBox id="vertragsart" x="530" y="56" dataProvider="{provider.selectedItem}" labelField="@vertragsart" width="140"/>
        
        <mx:Label x="451" y="84" text="Tarif: "/>
        <mx:ComboBox id="tarif" x="528.5" y="82" width="141.5" dataProvider="{provider.selectedItem}" labelField="@tarif"/>
</mx:Application>


Получается или список тех же самых провайдеров при таком раскладе user posted image
Код

<provider providerID="O2" vertragsart="Neue Kunde" tarif="1000 O2"/><provider providerID="VF" vertragsart="Neue Kunde" tarif="1000 VF"/><provider providerID="VF" vertragsart="VVL" tarif="1000 VF"/><provider providerID="VF" vertragsart="Neue Kunde" tarif="3000 VF"/>

или user posted image
при таком
Код

<provider providerID="O2"><vertragsart>Neue Kunde</vertragsart><vertragsart>VVL</vertragsart><tarif>1000 O2</tarif><tarif>2000 O2</tarif></provider>y<provider providerID="VF"><vertragsart>Neue Kunde2</vertragsart><vertragsart>VVL2</vertragsart><tarif>1000 VF</tarif><tarif>2000 VF</tarif></provider>


Это сообщение отредактировал(а) locust19 - 14.12.2009, 14:26
PM MAIL   Вверх
chaos
Дата 14.12.2009, 14:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



locust19, на тебе другой пищи для ума smile


Код

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            
            [Bindable]
            public var dataXml:XML =
                <content>
                    <provider providerID="O2" vertragsart="Neue Kunde" tarif="1000 O2"/>
                    <provider providerID="VF" vertragsart="Neue Kunde" tarif="1000 VF"/>
                    <provider providerID="VF" vertragsart="VVL" tarif="1000 VF"/>
                    <provider providerID="VF" vertragsart="Neue Kunde" tarif="3000 VF"/>
                </content>;
            
            
            private function distinct(xml:XML, attr:*, provider:* = null):ArrayCollection {
                var result:ArrayCollection = new ArrayCollection;
                
                for each (var node:XML in dataXml.provider) {
                    const value:String = node.attribute(attr)[0];
                    if (provider == node.@providerID || null == provider) {
                        if (-1 == result.getItemIndex(value)) {
                            result.addItem(value);
                        }
                    }
                }
                
                return result;
            }
        ]]>
    </mx:Script>
    <mx:ComboBox x="60" y="56" dataProvider="{distinct(dataXml, 'providerID')}" id="prov"/>
    <mx:ComboBox x="60" y="98" dataProvider="{distinct(dataXml, 'vertragsart', prov.selectedItem)}"/>
</mx:WindowedApplication>


ЗЫ советую хорошо ознакомится с документацией + E4X
ЗЫЫ Жаль конечно что во флекс не встроили XQuery


upd: чото вошел во-вкус smile и сделал следующее
Код

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            
            [Bindable]
            public var dataXml:XML =
                <content>
                    <provider providerID="O2" vertragsart="Neue Kunde" tarif="1000 O2"/>
                    <provider providerID="VF" vertragsart="Neue Kunde" tarif="1000 VF"/>
                    <provider providerID="VF" vertragsart="VVL" tarif="1000 VF"/>
                    <provider providerID="VF" vertragsart="Neue Kunde" tarif="3000 VF"/>
                </content>;
            
            
            private function distinct(xml:XML, select:String, ... where):ArrayCollection {
                var result:ArrayCollection = new ArrayCollection;
                
                for each (var node:XML in dataXml.provider) {
                    var whereResult:Boolean = true;
                    cycle2: for (var i:uint = 0; i < where.length; i++) {
                        const o:Object = where[i]; 
                    
                        for (var attr:String in o) {
                            if (node.attribute(attr)[0] != o[attr]) {
                                whereResult = false;
                                break cycle2;
                            }
                        }
                    }
                    
                    if (whereResult) {
                        const value:String = node.attribute(select)[0];
                        if (-1 == result.getItemIndex(value)) {
                            result.addItem(value);        
                        }    
                    }
                }
                
                return result;
            }
        ]]>
    </mx:Script>
    <mx:ComboBox x="60" y="56" dataProvider="{distinct(dataXml, 'providerID')}" id="prov"/>
    <mx:ComboBox x="60" y="98" dataProvider="{distinct(dataXml, 'vertragsart', {'providerID': prov.selectedItem})}" id="vert"/>
    <mx:ComboBox x="60" y="140" dataProvider="{distinct(dataXml, 'tarif', {'providerID': prov.selectedItem}, {'vertragsart': vert.selectedItem})}"/>
</mx:WindowedApplication>




Это сообщение отредактировал(а) chaos - 14.12.2009, 16:05
PM WWW   Вверх
chaos
Дата 14.12.2009, 16:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Еще решил добавить smile
1. пост выше мне кажется извращением smile
2. полученную XML необходимо "нормализовать"
Код

<content>
    <provider id="O2">
        <vertragsart name="Neue Kunde">
            <tarif name="1000 O2"/>
        </vertragsart>
    </provider>

    <provider id="VF">
        <vertragsart name="Neue Kunde">
            <tarif name="1000 VF"/>
            <tarif name="3000 O2"/>
        </vertragsart>
        <vertragsart name="VVL">
            <tarif name="1000 VF"/>
        </vertragsart>
    </provider>
</content>

тогда все сведется к банальному см пост выше или готовый пример
Код

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            [Bindable]
            public var dataXml:XML =
                <content>
                    <provider id="O2">
                        <vertragsart name="Neue Kunde">
                            <tarif name="1000 O2"/>
                        </vertragsart>
                    </provider>
                    <provider id="VF">
                        <vertragsart name="Neue Kunde">
                            <tarif name="1000 VF"/>
                            <tarif name="3000 O2"/>
                        </vertragsart>
                        <vertragsart name="VVL">
                            <tarif name="1000 VF"/>
                        </vertragsart>
                    </provider>
                </content>;
        ]]>
    </mx:Script>
    <mx:ComboBox x="60" y="56" dataProvider="{dataXml.provider}" labelField="@id" id="prov"/>
    <mx:ComboBox x="60" y="98" dataProvider="{prov.selectedItem.vertragsart}" labelField="@name" id="vert"/>
    <mx:ComboBox x="60" y="140" dataProvider="{vert.selectedItem.tarif}" labelField="@name"/>
</mx:WindowedApplication>


Это сообщение отредактировал(а) chaos - 14.12.2009, 16:20
PM WWW   Вверх
locust19
Дата 14.12.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 25.11.2009

Репутация: нет
Всего: нет



Вау огромное спасибо. работает  smile  smile  Это лучший форум, спасибо всем за отзывчивость

Код

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
    backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#CCCCCC, #CCCCCC]">
    <mx:XMLList id="dataXml">
 <content>
                    <provider id="O2">
                        <vertragsart name="Neue Kunde">
                            <tarif name="1000 O2"/>
                        </vertragsart>
                    </provider>
                    <provider id="VF">
                        <vertragsart name="Neue Kunde">
                            <tarif name="1000 VF"/>
                            <tarif name="3000 O2"/>
                        </vertragsart>
                        <vertragsart name="VVL">
                            <tarif name="1000 VF"/>
                        </vertragsart>
                    </provider>
                </content>
          </mx:XMLList>       
                <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            
            
            
            private function distinct(xml:XML, select:String, ... where):ArrayCollection {
                var result:ArrayCollection = new ArrayCollection;
                
                for each (var node:XML in dataXml.provider) {
                    var whereResult:Boolean = true;
                    cycle2: for (var i:uint = 0; i < where.length; i++) {
                        const o:Object = where[i]; 
                    
                        for (var attr:String in o) {
                            if (node.attribute(attr)[0] != o[attr]) {
                                whereResult = false;
                                break cycle2;
                            }
                        }
                    }
                    
                    if (whereResult) {
                        const value:String = node.attribute(select)[0];
                        if (-1 == result.getItemIndex(value)) {
                            result.addItem(value);        
                        }    
                    }
                }
                
                return result;
            }
        ]]>
    </mx:Script>    
    <mx:ComboBox x="60" y="56" dataProvider="{dataXml.provider}" labelField="@id" id="prov"/>
    <mx:ComboBox x="60" y="98" dataProvider="{prov.selectedItem.vertragsart}" labelField="@name" id="vert"/>
    <mx:ComboBox x="60" y="140" dataProvider="{vert.selectedItem.tarif}" labelField="@name"/>
    
</mx:Application>


Это сообщение отредактировал(а) locust19 - 14.12.2009, 16:31
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Flex | Следующая тема »


 




[ Время генерации скрипта: 0.1338 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.