![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2005
Адрес: Литва
Сообщений: 195
|
"Здравствуйте!
У меня есть что-то похожее на галерею. Использую флешевский пример, который находиться тут - диск/Program Files/Macromedia/Flash 8/Samples and Tutorials/Samples/ActionScript/Galleries , файл gallery_tree. Мне интересно узнать, можно в данный пример добавить поиск. Например, после введёного названия фотографии список развернулся бы и она выбралась автоматически... Если можно, то посоветуйте, пожалуйста, как это сделать?" - этот вопрос у меня был совсем недавно, но к сожалению никто на него не ответил. Иеперь мне нужно научиться 1. Научиться искать в XML. 2. Перехватить тот XML, в котором надо искать. Может быть кто-нибудь знает, как это реализовать... |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Я знаю, что ваша тема тут и на другом форуме. Не много ли?
Накидал такой примитив (добавить после кода в примере), но поскольку я компонетами не пользуюсь, то возможно все еще проще, но мне лень вникать. ////
var o:Object = new Object ();
Key.addListener (o);
o.onKeyDown = function () {
if (Selection.getFocus () == String (txt) && Key.isDown (Key.ENTER)) {
var node:Array = treeDP_xml.firstChild.firstChild.childNodes;
var str:String = txt.text;
for (var i:Number = 0; i < node.length; i++) {
if (node[i].attributes.label == str || node[i].attributes.src == str) {
my_tree.setIsOpen (my_tree.getTreeNodeAt (0), true);
my_tree.selectedNode = my_tree.getTreeNodeAt (0).getTreeNodeAt (i);
treeListener.change ({target:my_tree});
break;
}
}
}
};
var txt:TextField = this.createTextField ("txt", this.getNextHighestDepth (), 300, 20, 200, 30);
txt.background = true;
txt.border = true;
txt.type = "input";
txt.text = "DCP_0732";
|
|
|||||
|
Регистрация: Sep 2005
Адрес: Литва
Сообщений: 195
|
Больщое Вам спасибо! Как оказалось всё на самом деле не так трудно, как я думал.
|
|
|||||
|
Регистрация: Sep 2005
Адрес: Литва
Сообщений: 195
|
2 iNils : у меня к Вам возник ещё один не большой вопрос.
как я понимаю, эта строка кода "загоняет" всё из XML-файла в масив. Всё отлично работает для макромедиевского примера. Но дело в том, что там, в примере, всего одна галерея. А как быть, если их несколько. Я уже совсем запутался в этих Child'ах... Допустим, если я заменяю эту строку на то для поиска доступна только последняя галерея. Если так то не работает вообще ничего... Так вот, вопрос заключается в том, как записать в масив весь XML-файл, если в нём не одна галерея, я n-штук? |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Допустим есть
<?xml version="1.0"?> <tree> <node label="Gallery 1"> <node label="DCP_0730" src="DCP_0730.jpg" /> <node label="DCP_0731" src="DCP_0731.jpg" /> </node> <node label="Gallery 2"> <node label="DCP_0730" src="DCP_0730.jpg" /> <node label="DCP_0731" src="DCP_0731.jpg" /> </node> </tree> Где номер - это номер нода задающий галерею, <node label="Gallery 1"> или <node label="Gallery 2">, причем отсечт идет от 0. Соответственно, вам нужно организовать цикл, чтобы обочти все галереи. |
|
|||||
|
Регистрация: Sep 2005
Адрес: Литва
Сообщений: 195
|
Мой XML-файл выглядит так:
<?xml version="1.0"?> <tree> <node label="Gallery 1"> <node label="DCP_0730" src="DCP_0730.jpg" /> <node label="DCP_0731" src="DCP_0731.jpg" /> </node> <node label="Gallery 2"> <node label="DCP_0732" src="DCP_0732.jpg" /> <node label="DCP_0733" src="DCP_0733.jpg" /> </node> </tree> for ( var n:Number = 0; n<2 ; n++) {
var node:Array = treeDP_xml.firstChild.childNodes[n].childNodes;
trace(node);
}
Это ведь значит, что масив заполнен так, как нам надо. Но почему-то теперь поиск работает только для последней галереии. А разварачивает первую. Т.е. если искать "DCP_0732", покажет картинку для него, а "выбраной" в дереве будет DCP_0730.jpg. По первой же галереии поиск вообще не даёт ничего... |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Заменить часть кода на этот
if (Selection.getFocus () == String (txt) && Key.isDown (Key.ENTER)) {
for (var j:Number = 0; j < treeDP_xml.firstChild.childNodes.length; j++) {
var node:Array = treeDP_xml.firstChild.childNodes[j].childNodes;
var str:String = txt.text;
trace (j)
for (var i:Number = 0; i < node.length; i++) {
if (node[i].attributes.label == str || node[i].attributes.src == str) {
my_tree.setIsOpen (my_tree.getTreeNodeAt (j), true);
my_tree.selectedNode = my_tree.getTreeNodeAt (j).getTreeNodeAt (i);
treeListener.change ({target:my_tree});
break;
}
}
}
};
|
|
|||||
|
Регистрация: Sep 2005
Адрес: Литва
Сообщений: 195
|
Спасибо! Разобрался и более менее всё понял!
У меня ещё возник вопрос, просто на будущее. А если, допустим, в галерее 1, есть ещё галерея 3, в ней галерея 4 и т.д. То как тогда можно было бы организовать "обход" дерева? |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
1. Разобраться что такое XML и как с ним работать во флеш. Можно прочитать тут http://www.artlebedev.ru/tools/techn...etc/flash-xml/
2. Зайти в поиск и поискать по словам дерево, xml*, обход и тому подобное. |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:42. |
|
|
« Предыдущая тема | Следующая тема » |
|
|