E4X Trick
Вам никогда не требовалось, скажем, пронумеровать все узлы вашего XML определенным атрибутом? Использовать циклы и прочие громоздкие конструкции с рекурсией совершенно неинтересно.
Попробуем средствами E4X. Например, есть у нас вот такой XML и итератор:
This content requires Adobe Flash Player.
Пробуем присвоить все атрибуты:
This content requires Adobe Flash Player.
Получаем ошибку «TypeError: Error #1089: Assignment to lists with more than one item is not supported.». Значит мы не можем присвоить атрибут более чем одному элементу. Пойдем с другой стороны:
This content requires Adobe Flash Player.
Получаем ошибку «TypeError: Error #1010: A term is undefined and has no properties.». Получается, что пока атрибут не будет существовать, мы не сможем присвоить значение.
Хорошо, переделаем XML:
This content requires Adobe Flash Player.
Получаем то, что и требовалось:
This content requires Adobe Flash Player.
Определенно, нас такой подход не устраивает. Что ж, небольшой трюк:
This content requires Adobe Flash Player.
Проблема решена
11 comments
11 Comments so far
Leave a reply
Хитёр ::)))
Прошу прощения, но все же такая раскраска кода не рулит и вот почему: в RSS, через которые многие читают блоги, вместо кода я вижу лишь следующее:
То есть в принципе с тем же успехом можно убрать RSS из блога
Пытался прикрутить highlight.js, но не получилось.
Попробую сковырнуть RSS и переделать вывод.
UPD: Переделал
Да. Так лучше
Улетненько!
E4X или feed?
И то и другое:)
Типа некропост, я раньше этой записи не видел…
var xml:XML =
;
xml.*.(valueOf().@whatever = Math.random());
trace(xml.toXMLString());
А я вообще искал твой пост про компиляцию флешевых векторных объектов силами AS3…
Клева, я, оказывается, такой пост писал
А как вместо ++index получить значение из функции, где параетром будет значение, полученное на основе родителя текущего узла?
В данном примере что должно быть вместо VALUE?
xml..*.((parent().children()[childIndex()].@index = getAttribute(VALUE)));
Сам запутался
(parent().children()[childIndex()] можно поменять на valueOf(), как писал выше Олег. А в аттрибут надо сувать parent().