![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Modus ponens
|
Поскольку наследовать от ХМЛя низзя (но иногда очень бы хотелось... =) Возникает вопрос, как можно было бы организовать такую штуку:
Существует под-формат ХМЛя позволяющий только определенные имена тэгов / аттрибутов + регламентирующий, что в этих аттрибутах может быть. Но ради реализации этого формата не хочется придумывать ХМЛ еще раз, а использовать его возможности... С именами элементов проблему решил следующим образом: класс динамический, и когда у него пытаются создать свойство, названия которого нет в списке - выдает ошибку. А вот сделать то же самое с аттрибутами не получается - т.как обращение к аттрибуту типа @attributeName для не ХМЛ/ХМЛЛиста вызовет ошибку... Есть какие-нибудь идеи по этому поводу?
__________________
Hell is the possibility of sanity |
|
|||||
|
wvxvw я вас не совсем понял... Что-то типа такого вы хотите:
package
{
public class LimitedXMLList
{
private var _data:XMLList = new XMLList("<doc><node /></doc>");
private var supportedNames:Array = [ "id", "login", "password" ];
private var numNames:int = supportedNames.length;
private var hasValue:Boolean;
public function LimitedXMLList()
{
super();
}
public function addParam(varName:String, varValue:String):Boolean
{
hasValue = false;
for(var i:int = 0; i<numNames; i++)
{
if(supportedNames[i] == varName)
{
hasValue = true;
break;
}
}
if(!hasValue)
{
throw new Error("Unsupported varName = '"+varName+"'. Supported names: "+supportedNames, 0);
return false;
}
_data.node..@[varName] = varValue;
return true;
}
public function get data():XMLList
{
return _data;
}
}
}
import LimitedXMLList;
var myList:LimitedXMLList = new LimitedXMLList();
myList.addParam("id", "659");
myList.addParam("login", "Ivan");
myList.addParam("password", "test");
myList.addParam("someVar", "someValue"); // Error: Unsupported varName = 'someVar'. Supported names: id,login,password
trace(myList.data);
Цитата:
|
|
|||||
|
Проблема насколько я понимаю заключается в том, что хочется сделать свой тип, который будет поддерживать @ - оператор доступа к атрибуту. ActionScript в нынешней своей версии не позволяет подобно с++ прописывать поведение операторов, честно не знаю как правильно это назвать, так что знающие люди поправьте.
Например, у нас есть класс Vector, одна из возможных операций это складывание векторов. В ActionScript нет возможности использовать конструкцию vector1 + vector2, поскольку + оператор сложения, который можно применять для строк, чисел и тд. Но нет возможности заставить этот оператор правильно сложить два экземпляра класса Vector. Поэтому реализовать данную операции можно только через создание соответствующего метода. Здесь насколько я понимаю ситуация схожая, есть желание использовать оператор @ для не XML или XMLList объектов. Собственно и реализация может быть только в виде метода.
__________________
Челябинские флешеры настолько суровы, что пишут код во Flash IDE |
|
|||||
|
Modus ponens
|
ulik:
Да, мысль примерно правильная, только так делать очень нееффективно... vooparker Угу, в итоге все закончилось написанием своего ХМЛ-подобного класса (вернее группы классов) и использованию $ вместо @.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Dec 2007
Сообщений: 269
|
Зачем? Ты же Proxy испульзуешь, обращайся нормально через @, а внутри проверяй что передано через isAttribute.
|
|
|||||
|
Modus ponens
|
если бы... Флеш не воспринимает @ после точки как строку... т.е. я не смогу обнаружить, обращаюсь ли я к аттрибуту или к ноду...
т.е. getProperty() видит customProxy.@attr и customProxy.attr одинаково... (как будто @ там нету) edited: а, ой, сорри про isAttribute не заметил =) вот млин, а я мучался =) Млин, даж нинаю, прям обрадовался... а ларчик то просто открывался =)
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 24.06.2008 в 20:33. |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|