Мобильный Flex с использованием Parsley

Я использую Parsley в своем гибком мобильном проекте. У меня есть несколько целевых служб, но я не могу найти больше ресурсов о том, как добавить другую целевую службу в файл config.xml. Файл выглядит следующим образом:

<objects 
    xmlns="http://www.spicefactory.org/parsley"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.spicefactory.org/parsley 
        http://www.spicefactory.org/parsley/schema/2.4/parsley-core.xsd">


    <object type="mx.rpc.remoting.RemoteObject" id="genBUS">
        <property name="destination" value="genBUS"/>
        <property name="endpoint" value="http://localhost:8080/ClinASM/messagebroker/amf" />
    </object>
</object>

В случае, когда я создаю другой

<object type="mx.rpc.remoting.RemoteObject" id="anotherBUS"></objects>

и делать

[Inject(id='genBUS')]
public var genBUS:RemoteObject;

он жалуется, что я определил несколько удаленных объектов. Как это работает? Как я могу внедрить другую службу назначения? Было бы здорово узнать больше о петрушке...

ОБНОВЛЕНИЕ: config.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Object 
    xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns="http://www.spicefactory.org/parsley">


    <Object id="genBUS" type="mx.rpc.remoting.RemoteObject">
        <Property name="destination" value="genBUS" />
        <Property name="endpoint" value="http://localhost:8080/ClinASM/messagebroker/amf" />
    </Object>

    <Object id="karBUS" type="mx.rpc.remoting.RemoteObject">
        <Property name="destination" value="karBUS" />
        <Property name="endpoint" value="http://localhost:8080/ClinASM/messagebroker/amf" />
    </Object>


</mx:Object> 

person Zaur Guliyev    schedule 29.03.2012    source источник
comment
Похоже, что он не получает метаданные «id» и пытается внедрить по типу, а не по идентификатору.   -  person RIAstar    schedule 29.03.2012
comment
Да, я знаю.. но как определить здесь в config.xml несколько удаленных объектов?!   -  person Zaur Guliyev    schedule 29.03.2012
comment
Как и вы, поэтому единственное, что я могу придумать из имеющейся у меня информации, это то, что может быть ошибка в конфигурации на основе XML с идентификаторами. Попробуйте написать ту же конфигурацию, что и MXML, и посмотрите, что получится? Кстати, внедрение на основе идентификатора не очень хорошая практика (см. документы Parsley разделы 4.4 и 4.5)   -  person RIAstar    schedule 29.03.2012
comment
то же: Ошибка: зарегистрировано более одного объекта типа mx.rpc.remoting::RemoteObject   -  person Zaur Guliyev    schedule 29.03.2012
comment
Я обновил сообщение и включил config.mxml... И, кстати, приложение выдает указанную выше ошибку перед запуском - при инициализации...   -  person Zaur Guliyev    schedule 29.03.2012


Ответы (1)


Внедрение по идентификатору не считается хорошей практикой, поскольку вы создаете зависимость на основе имени. Измените имя или сделайте опечатку, и ваше приложение сломается, и это будет трудно отладить.

Так что, как правило, вы должны стараться избегать этого. Документы Parsley объясняют, как это сделать. Я просто добавлю простой пример, чтобы показать вам, как вы будете использовать эту технику с несколькими удаленными объектами.

<fx:Object xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:p="http://www.spicefactory.org/parsley">

<fx:Script>
    import path.to.service.GenBusDelegate;
    import path.to.service.KarBusDelegate;
</fx:Script>

<fx:Declarations>
    <fx:String id="gateway">http://localhost:8080/ClinASM/messagebroker/amf</fx:String>

    <s:RemoteObject id="genBus" destination="genBus" endpoint="{gateway}" />
    <s:RemoteObject id="karBus" destination="karBus" endpoint="{gateway}" />

    <p:Object type="{GenBusDelegate}">
        <p:ConstructorArgs>
            <p:ObjectRef idRef="genBus" />
        </p:ConstructorArgs>
    </p:Object>

    <p:Object type="{KarBusDelegate}">
        <p:ConstructorArgs>
            <p:ObjectRef idRef="karBus" />
        </p:ConstructorArgs>
    </p:Object>

</fx:Declarations>
</fx:Object>

или если вы не хотите использовать аргументы конструктора:

    <p:Object type="{GenBusDelegate}">
        <Property name="remoteObject" idRef="genBus"/>
    </p:Object>
person RIAstar    schedule 29.03.2012
comment
Является ли path.to.service.GenBusDelegate чем-то отличным от моего автоматически сгенерированного класса обслуживания GenBUS?! если да, то как я могу создать этот класс?! - person Zaur Guliyev; 29.03.2012
comment
Причина, если я включаю тег ‹p:Property name=remoteObject idRef=genBus/› внутри ‹p:Object type={GenBUS}›, он говорит, что такого параметра GenBUS нет... примечание: GenBUS — это мой автоматически сгенерированный GenBUS.as класс обслуживания - person Zaur Guliyev; 29.03.2012
comment
@lbstr Да, это path.to.service.GenBusDelegate всего лишь пример. Я не знал, что существует автоматически сгенерированный класс, и не знаю, в каком пакете он находится. Поэтому либо вы заменяете этот оператор import правильным путем к вашему классу GenBus, либо отбрасываете импорт и просто пишете весь путь в атрибуте type: <p:Object type="{path.to.generated.GenBUS}"> - person RIAstar; 29.03.2012
comment
О.. виноват был я! Я попытался вызвать второй метод удаленного объекта в методе инициализации представления, где объекты еще не ограничены... Я изменил его, и теперь он работает! Спасибо за ваше время и помощь! - person Zaur Guliyev; 31.03.2012