![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
День добрый, пытаюсь вытащить из БД определенные столбцы (что вообщем то получается, использую недавноупомянутый драйвер asSQL) и сформировать из них новый ArrayCollection с целью скормить в роли дата провайдера для компонента Tree. С этим есть проблемы(( Переделываю из примера с датагридом. Пробую сделать так:
// выбираем нужныенам столбцы var token:MySqlToken = st.executeQuery("SELECT userf, useri, usero FROM usrtab"); token.addEventListener(MySqlEvent.COLUMNDATA, function(e:MySqlEvent):void { tempArr = new ArrayCollection(); // временная коллекция куда все складываем // grid.columns = ResultsUtil.getDataGridColumns( e.resultSet ); // grid.dataProvider = users; }); //listen for new rows token.addEventListener(MySqlEvent.ROWDATA, function(e:MySqlEvent):void { addNewRows(e.resultSet); }); //add a responder token.addResponder(new AsyncResponder( function(data:Object, token:Object):void { //call add new rows again to ensure we have all the rows addNewRows(ResultSet(data)); }, function(info:Object, token:Object):void { Alert.show("Error: " + info); }, token )); } private function addNewRows(rs:ResultSet):void { //get our data provider var dp:ArrayCollection = tempArr;//.dataProvider as ArrayCollection; var newRows:ArrayCollection = rs.getRows(false, dp.length, (rs.size()-dp.length)); dp.source = dp.source.concat( newRows.source ); // dp.refresh(); if(++ll == (count)) // определяем что обошли все записи { userArr = new ArrayCollection(); var total1:int = newRows.length; // определяем длинну подмассива var total2:int = dp.length; // определяем длинну главной коллекции for(var i:int = 0; i < total1; i++) { for(var j:int = 0; j < total2; j++) { newArr.getItemAt(i) += arrTotal.getItemAt(j).getItemAt(i) + ' '; // получаем елемент1 + елемент2 + елемент3 } } tree.dataProvider = newArr; // в конце назначаем, как дата провайдер } } ]]> </mx:Script> <mx:Tree id="tree" left="10" right="10" top="10" bottom="10" /> var arr1:Array = []; var arr2:Array = []; var arr3:Array = []; var i:int = 0; var j:int = 0; for(i = 0; i < 500; i++) // заполняем наши массивы { arr1[i] = arr2[i] = arr3[i] = i; } var arrTotal:Array = [arr1, arr2, arr3]; // имитируем нашу ситуацию, в одной коллекции, есть несколько других коллекций var newArr:Array = []; // делаем то что нам надо for(i = 0; i < arrTotal[0].length; i++) { newArr[i] = ''; // делаем пустой елемент, for(j = 0; j < arrTotal.length; j++) { newArr[i] += arrTotal[j][i] + ' '; // получаем елемент1 + елемент2 + елемент3 } } trace(newArr[100]); // на выходе охота получить что то типа этого. З.Ы. за основу взял этот пример Последний раз редактировалось nOobCrafter; 28.08.2009 в 11:39. |
|
|||||
|
[+1.3 31.07.07]
Регистрация: Jul 2007
Сообщений: 64
|
А ты можешь в дебаге посмотреть чему равен newArr
Вот в этом моменте: Скопировать всё, и выложить сюда, всю структуру. Тогда сразу будет видно проблему... |
|
|||||
|
wvxvw спасибо на добром слове, но вообщем то все эти аномалии взяты из примера, что на главной странице этой библиотеки( К тому же проблема укреплялась моим абсолютным непониманием работы ArrayCollection. Теперь проблема решена вот таким образом, может немного кривовато зато работает.)
private function addNewRows(rs:ResultSet):void // добавляем пользователей { var tempArr:Array = ['']; // делаем пустой временный массив var dp:ArrayCollection = grid.dataProvider as ArrayCollection; var dbSource:Array = dp.source[0].children as Array;// определяем источник данных var newRows:ArrayCollection = rs.getRows(false, dbSource.length, (rs.size() - dbSource.length)); // определяем ряды len = newRows.source.length; // опеределяем кол-во рядов var propLen:int = usersNameColumn.length; for(i = 0; i < len; i++) { var str:String = String(++counter) + ' ';//''; // для тестов) + пустая строка куда заносим результат for(var j:int = 0; j < propLen; j++) // смысл в том тчо пробегаемся по ряду, собираем все что там записано и ложим в строку { var propName:String = usersNameColumn[j]; var prop:String = newRows.source[i][propName]; if(prop != null) { str += prop + ' '; } // cтрока должна быть не пустой } var tempObj:Object = {label: str, children: []};// делаем обьект и в его св-ва пишем имя подьзователя tempArr[i] = tempObj; // пихаем в массив //trace(str + ' -- ' + i); } trace(tempArr.length); var newArrCol:ArrayCollection = new ArrayCollection(tempArr); // делаем такой финт ушами, зачем непонял, но иначе будет небольшой беспорядок(( dp.source[0].children = newArrCol.source;//dp.source.concat(newArrCol.source); trace('========================'); } |
|
|||||
|
Modus ponens
|
>> взяты из примера, что на главной странице этой библиотеки
Где он? О какой библиотеке речь? Неужели на этом форуме? Если да, ткните пальцем, надо срочно ликвидировать ![]()
__________________
Hell is the possibility of sanity |
|
|||||
|
да нет, не на этом, в первом посте была ссылка на пример http://code.google.com/p/assql/wiki/...eaming_Results . Как мне сказали еще можно сделать через labelFunction, но она запускается каждый раз при перерисовке дерева, и если элентом будет несколько тысяч то возможны тормоза, поэтому решил 1 раз нормально создать дата провайдер и не париться. В коде выше я просто из того тчо мне приходит соираю то что мне надо. Громоздко конечно, но мне кажеться все же будет практичнее нежеле каждый раз дергать ту же labelFunction. Если есть еще какие то варианты о которых я не знаю то с радостью выслушаю.
|
|
|||||
|
Modus ponens
|
А ну если там такие чудо-примеры на главной странице, я себе представляю, как оно внутри работает...
![]() А по поводу вашей ситуации с массивами... Я все равно не совсем уверен, что понимаю, что именно нужно было сделать, но если код в примере выше точно отражает ситуацию, то что-то такое:
__________________
Hell is the possibility of sanity |
|
|||||
|
когда я писал первый пост, я плохо представлял что именно от меня надо, теперь я более менее понял, структура примено такова
// то что у нас есть на входе var source : Array = [{property_1: 'item1.1' property_2: 'item1.2' property_3: 'item1.3'}, {property_1: 'item2.1' property_2: 'item2.2' property_3: 'item2.3'}, {property_1: 'item3.1' property_2: 'item3.2' property_3: 'item3.3'}, {property_1: 'item4.1' property_2: 'item4.2' property_3: 'item4.3'}, ... несколько тысяч таких обектов... {property_1: 'itemN.1' property_2: 'itemN.2' property_3: 'itemN.3'}]; // то что я формирую на выходе и отдаю в качестве дата провайдера компоненту - дерево var requisiteArray:Array = [{property: 'item1.1 item1.2 item1.3'}, {property: 'item2.1 item2.2 item2.3'}, {property: 'item3.1 item3.2 item3.3'}, {property: 'item4.1 item4.2 item4.3'}, ... несколько тысяч таких обектов... {property: 'itemN.1 itemN.2 itemN.3'}]; |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:51. |
|
|
« Предыдущая тема | Следующая тема » |
|
|