Проблемы с mx: method, mx.rpc.remoting.mxml.RemoteObject и подклассами mx.rpc.remoting.mxml.RemoteObject - PullRequest
0 голосов
/ 06 мая 2010

Я ищу подкласс RemoteObject. Вместо:

<mx:RemoteObject ... >
    <mx:method ... />
    <mx:method ... />
</mx:RemoteObject>

Я хочу сделать что-то вроде:

<remoting:CustomRemoteObject ...>
    <mx:method ... />
    <mx:method ... />
</remoting:CustomRemoteObject>

где CustomRemoteObject расширяется mx.rpc.remoting.mxml.RemoteObject примерно так:

package remoting
{
    import mx.rpc.remoting.mxml.RemoteObject;

    public class CustomRemoteObject extends RemoteObject
    {
        public function CustomRemoteObject(destination:String=null)
        {
            super(destination);
        }
    }
}

Однако при этом и объявлении CustomRemoteObject в MXML, как указано выше, компилятор flex показывает ошибку:

Не удалось разрешить для реализации компонента

Сначала я подумал, что это как-то связано с CustomRemoteObject неспособностью что-либо сделать, несмотря на то, что (или с тех пор) у него не было никаких изменений, кроме как в отношении названия. Итак, я скопировал исходный код из mx.rpc.remoting.mxml.RemoteObject в CustomRemoteObject и изменил его так, чтобы разница only была рефакторингом класса и имени пакета. Но все равно та же ошибка.

В отличие от многих компонентов MXML, я не могу cmd + щелкнуть <mx:method> во FlashBuilder, чтобы открыть исходный код. Кроме того, я не нашел ссылку в mx.rpc.remoting.mxml.RemoteObject, mx.rpc.remoting.RemoteObject или mx.rpc.remoting.AbstractService и не смог найти ее источник в Интернете.

Что приводит меня к вопросам в названии:

Что точно является <mx:method>? (да, я знаю, что это объявление метода RemoteObject, и я знаю, как его использовать, но это необычно в отношении других компонентов) Почему моя попытка подкласса RemoteObject провалилась, несмотря на то, что это фактически было переименованием? Возможно, корень, почему mx.rpc.remoting.mxml.RemoteObject в качестве объявления MXML может принимать <mx:method> дочерние теги, но источник указанного класса не может, когда рефакторинг только в имени?

1 Ответ

0 голосов
/ 07 мая 2010

Синтаксис, который вы просматриваете («mx: метод»), - это способ определения свойств в MXML, а не в ACtionScript. Если бы это расширяло «стандартный» UIComponent, вы бы сделали это:

<remoting:CustomRemoteObject ...>
    <remoting:method ... />
    <remoting:method ... />
</remoting:CustomRemoteObject>

Однако, поскольку метод не является свойством RemoteObject, возможно, за кулисами скрывается некоторая магия компилятора. Бьюсь об заклад, он превращает теги "методов" в массив операций.

Возможно, вам придется сделать это вручную, примерно так:

<remoting:CustomRemoteObject ...>
  <remoting:Operations>
    <remoting:method ... />
    <remoting:method ... />
   </remoting:Operations>
</remoting:CustomRemoteObject>

Но вам, возможно, придется проанализировать код и / или запустить в режиме отладки и / или просмотреть сгенерированный скрипт действий, чтобы точно выяснить, что происходит и как «метод» превращается в массив операций.

Я думал, что источник классов удаленного взаимодействия был доступен в SDK; но, возможно, только SDK с открытым исходным кодом, а не SDK, поддерживаемый Adobe. Вы можете скачать SDK с открытым исходным кодом на opensource.adobe.com

Половина этого поста догадается.

...