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

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

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

Регистрация: Mar 2015
Сообщений: 14
По умолчанию AS3 DataProvider Как получить значение Элемента, внутри объекта

Доброго Времени суток, долго меня терзает данный вопрос - не как не могу решить.
Каким способом можно получить значение - элемента внутри массива объекта, мне это нужно для правильного вывода нужного мне объекта, ибо способ
Код AS3:
dataProvider.getItemAt(0).address
, не подходит - поскольку объекты индексируются 1 за другим, по мере длины коллекции, то есть нужный мне объект имеет Index 100, а ID его 20,
и указав в
Код AS3:
getItemAt(20)
, я получу совсем другой объект(А не тот который мне нужен), как мне обратиться напрямую к значению элемента(ID) внутри Объекта.

Объекты в моем случае это маркеры xml.
PHP код:
<marker id="1" name="Egypt Column test" scale="3" address="myMD2Models/packs/modelpack1/testHouse/testHouseMD2.md2" image="myMD2Models/packs/modelpack1/testHouse/testHouse.png" type="MD2" descript="a 3D model" zip="myMD2Models/packs/modelpack1/Model1.zip" /> 
В массив они добавляются подобным образом
Код AS3:
		for (var i:uint=0; i < markersCount; i++) {
			var markerXml:XML = markers[i];
 
			acMarkers.addItem({label: markerXml.@name, scale: markerXml.@scale, address: markerXml.@address,image: markerXml.@image, type: markerXml.@type, descript:markerXml.@descript,zip:markerXml.@zip  });	
		}
Код AS3:
<mx:DataGrid id="myDataGrid" dataProvider="{this.acMarkers}" itemClick="showInfo(event)" height="423.65"  y="61" x="10" width="162.55" alternatingItemColors="[#F7F7F7, #EFE4E4]" sortableColumns="false">
Не могу понять как мне проиндексировать объекты используя значение маркера ID, нужно вывести в отдельную переменную значение маркера ID, а потом использовать эту переменную в getItemAt(index("20")),или нужно создавать свой аналог getItemAt, addItem, а так же GetItemID(чтобы возвращать значение ID)?

По сути я хочу иметь возможность указывать значение ID, для того объекта который хочу вызвать, для загрузки.
Надеюсь все нормально объяснил!
Буду очень рад если помогут, мучаюсь уже пару дней.
Полный сурс проекта что я использую
http://pastebin.com/nfuC1Hzy

Старый 28.03.2015, 23:56
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Массив можно отсортировать по id
Код AS3:
markers.sortOn("@id");
но это Вам поможет только если в id есть настоящий порядок, то есть имеется весь ряд чисел по-порядку.
__________________
Reality.getBounds(this);

Старый 29.03.2015, 00:09
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Товарищ создает массив (markers) XML-ек и затем в цикле запихивает в DataProvider (acMarkers) итемы на основе этих XML-ек.
И затем хочет выковыривать итемы из DataProvider по их индексу, который бы совпадал с id.
__________________
Reality.getBounds(this);

Старый 29.03.2015, 00:26
LighFusion вне форума Посмотреть профиль Отправить личное сообщение для LighFusion Найти все сообщения от LighFusion
  № 4  
Ответить с цитированием
LighFusion

Регистрация: Mar 2015
Сообщений: 14
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Массив можно отсортировать по id
Код AS3:
markers.sortOn("@id");
но это Вам поможет только если в id есть настоящий порядок, то есть имеется весь ряд чисел по-порядку.
А как будет выглядеть сам метод - который будет вызывать нужный мне объект(по значению его атрибута/маркера), то есть можно использовать все как есть - dataProvider.getItemAt(index"100").address, getItem указывает на нужный мне объект через значение его атрибута, то есть этот метод будет пролистовывать по всем объектам и их атрибутам, и выводить мне только тот объект, с атрибутом которого я указал. Или нужно создавать свой метод ?


И скажем так, возможно ли использовать совсем другой поставшик данных, не dataProvider, цель лишь 1 - загрузить в сцену модель из списка .xml, по определенному ID, по сути это своего рода ModelViewer на Flash, типа такого http://goo.gl/C9vFk0.

Заранее спасибо, очень приятно что ответили так быстро!

P.S.
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Товарищ создает массив (markers) XML-ек и затем в цикле запихивает в DataProvider (acMarkers) итемы на основе этих XML-ек.
И затем хочет выковыривать итемы из DataProvider по их индексу, который бы совпадал с id.
но ведь индекс добавляется к каждому объекту по порядку, как сделать значение индекса равным значению ID самого итема, то есть не по порядку - Object(a)index(1),Object(b)index(2),Object(c)index(3); А Object(a)Index=Ojbect(a).Id, Object(b)Index=Ojbect(b).Id и тд , ведь сам id храниться в XML-Файле для каждого объекта свой.


Последний раз редактировалось LighFusion; 29.03.2015 в 01:05. Причина: Добавлено сообщение
Старый 29.03.2015, 16:56
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1/
Цитата:
как сделать значение индекса равным значению ID самого итема
addItemAt(id)
2/
Пользователь выбрал итем из списка — посылается Событие? В нем есть индекс итема или ссылка на него? Как-то же Вы узнаете, что пользователь сделал выбор? По этому индексу или ссылке можно достучаться до ID?

А то Ваш вопрос зыучит в какой-то обратной логике — типа "у меня есть ID но я не знаю как найти элемент в ДатаПровайдере по этому ID, чтобы... УЗНАТЬ ЕГО ID".
Если ID известен, то что мешает найти в XML нужную ноду и взять адрес?
Если индекс известен, то что мешает найти объект в ДатаПровайдере по этому индексу и взять адрес?
__________________
Reality.getBounds(this);

Старый 29.03.2015, 20:13
LighFusion вне форума Посмотреть профиль Отправить личное сообщение для LighFusion Найти все сообщения от LighFusion
  № 6  
Ответить с цитированием
LighFusion

Регистрация: Mar 2015
Сообщений: 14
Цитата:
Сообщение от Wolsh Посмотреть сообщение
1/ addItemAt(id)
2/
Пользователь выбрал итем из списка — посылается Событие? В нем есть индекс итема или ссылка на него? Как-то же Вы узнаете, что пользователь сделал выбор? По этому индексу или ссылке можно достучаться до ID?

А то Ваш вопрос зыучит в какой-то обратной логике — типа "у меня есть ID но я не знаю как найти элемент в ДатаПровайдере по этому ID, чтобы... УЗНАТЬ ЕГО ID".
Если ID известен, то что мешает найти в XML нужную ноду и взять адрес?
Если индекс известен, то что мешает найти объект в ДатаПровайдере по этому индексу и взять адрес?
addItemAt(id) К сожалению игнорирует Значение Index'a большее чем количество объектов, внутри DataProvider, то есть к примеру объектов в нем 2, а я ставлю acMarkers.addItemAt({address: markerXml.@address},20); 20 естественно превышает длину DataProvider, и игнорируется, так что не очень понимаю как это пофиксить ?Вообще это помоему не правильный способ(для того что мне нужно), ибо он используется для уже существующих объектов, а не для присвоение индекса к входящим.

Пользователю заранее предоставляется страница с той вещью которую он хочет просмотреть в 3D, при нажатии на кнопку, заранее заготовленный JS, передает вписанное значение - подобным образом
Код:
<a href="javascript:aionModelViewer.openWindow(600,525,4,110900069,'ru_RU');"><img src="/img/aion/viewin3d_ru_RU.png" border="0"></a>
110900069 это ID самой модели, которая должна отобразиться в сцене по средствам ActionScript, достаточно просто обратиться с ID, к файлу .xml где прописан путь до модели с этим ID, но вся проблема происходит до этого, нужно же ведь обратиться к объекту - указывая требуемый ID, ведь только после этого можно вписать какой параметр требуется использовать(в моем случае это путь до модели), а когда указываешь 110900069, а объект с нужным адресом, проиндексировался по-порядку и имеет Index(100), то не получаешь того что хотел.
Напрямую к адрессу/пути(до модели) не обратиться.
Объекты же ведь идут подобным образом
PHP код:
<?xml version="1.0" encoding="UTF-8"?>
<markers>
Первый Объект
<marker id="1" name="Egypt Column test" scale="3" address="myMD2Models/packs/modelpack1/testHouse/testHouseMD2.md2" image="myMD2Models/packs/modelpack1/testHouse/testHouse.png" type="MD2" descript="a 3D model" zip="myMD2Models/packs/modelpack1/Model1.zip" />
Второй Объект
<marker id="20" name="Egypt Column quake" scale="3" address="myMD2Models/packs/modelpack1/testHouse/theQuakeHouse.md2" image="myMD2Models/packs/modelpack1/testHouse/testImageQuakeSolid.png" type="MD2" descript="a 3D model" zip="myMD2Models/packs/modelpack1/Model1.zip" />
</markers>


Последний раз редактировалось LighFusion; 29.03.2015 в 20:33.
Старый 29.03.2015, 21:04
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 7  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
а запрос не поможет xml.marker.(@id==110900069)?

Добавлено через 5 минут
Или можно сделать словарь:
Код AS3:
var acMarkersDict:Object ={};
for (var i:uint=0; i < markersCount; i++) 
{
    var markerXml:XML = markers[i];
    var id:uint = uint(markerXml.@id);
    var obj:Object = {id: id, label: markerXml.@name, scale: markerXml.@scale, address: markerXml.@address,image: markerXml.@image, type: markerXml.@type, descript:markerXml.@descript,zip:markerXml.@zip };
    acMarkersDict[id] = obj;
    acMarkers.addItem(obj);	
}
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 29.03.2015, 21:10
LighFusion вне форума Посмотреть профиль Отправить личное сообщение для LighFusion Найти все сообщения от LighFusion
  № 8  
Ответить с цитированием
LighFusion

Регистрация: Mar 2015
Сообщений: 14
Цитата:
Сообщение от GBee Посмотреть сообщение
а запрос не поможет xml.marker.(@id==110900069)?
НУ в принципе наверное поможет, если обращение идет по всем объектам внутри .xml, и при нахождении нужного оно присваивается, в переменную которую можно использовать как Index.

Вообще я по-моему понял как это решить, но не знаю как это представить в коде.
Суть в том чтоб загрузить все объекты из .xml в массив обычным образом, то есть OBJ1,OBJ2,OBJ3,OBJ4, А дальше прочесть у всех объектов параметр(id), и сделать что-то типа If Equals requestid == id(из объектов), то вернуть index Объекта на котором этот id Был найден, а дальше уже подставить Index в GetobjectAt(index) и все.

Но вроде только я не шарю как это лучше представить в коде ?

Старый 29.03.2015, 21:18
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 9  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Я не очень понимаю, что вы делаете.
Вы можете описать логику ГУЯ нормально? Просто то что описано я вижу так:
Есть таблица заполненная массивом, который был собран из хмл.
Вам почему-то нужно взять инфу о каком то объекте по ид, но вы лезете в датапровайдер таблицы (хотя там уже даже не ваш массив, а ArrayCollection по идее)
Или вам нужно по выбранному элементу в таблице показать инфу о нем, передав ид во внешний ЖС?

Добавлено через 4 минуты
Но в любом случае словарь решает вашу задачу, по-моему.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 29.03.2015, 21:37
LighFusion вне форума Посмотреть профиль Отправить личное сообщение для LighFusion Найти все сообщения от LighFusion
  № 10  
Ответить с цитированием
LighFusion

Регистрация: Mar 2015
Сообщений: 14
Цитата:
Сообщение от GBee Посмотреть сообщение
Я не очень понимаю, что вы делаете.
Вы можете описать логику ГУЯ нормально? Просто то что описано я вижу так:
Есть таблица заполненная массивом, который был собран из хмл.
Вам почему-то нужно взять инфу о каком то объекте по ид, но вы лезете в датапровайдер таблицы (хотя там уже даже не ваш массив, а ArrayCollection по идее)
Или вам нужно по выбранному элементу в таблице показать инфу о нем, передав ид во внешний ЖС?

Добавлено через 4 минуты
Но в любом случае словарь решает вашу задачу, по-моему.
Нет передавать обратно в ЖС не надо,
жс возвращает в ActionScript - RequestID(через FlashVars), этот RequestID указывает на ID модели которую нужно будет загрузить, через хмл - <marker id="20" adress="mymodels/model.md2" >OBJ1,<marker id="25" adress="mymodels/model2.md2" >OBJ2, на сколько я понял, через словари - можно прочесть значение маркера id, и обратно вернется порядковый номер самого объекта, если будет if statement equals, которое уже потом будет возвращаться в глобал переменную - само значение, которое можно подставить в getItemAt, надеюсь я вас правильно понял ?
P.S.
Или оно сразу использует ID(acMarkersDict[id] = obj из xml- как значение порядкового номера ?

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

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

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


 


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


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