Flex: извлечение данных из элемента управления Tree - PullRequest
1 голос
/ 07 апреля 2009

Таким образом, Flex предоставляет отличные API-интерфейсы для манипулирования пользователями своих элементов управления с подачей данных, но, насколько я понимаю, я не могу понять, как вернуть данные из-под контроля, как только пользователь закончит играть Это. В частности, я включил элементы управления dragMove в компоненте Tree, но не могу понять, как вернуть инициированные пользователем изменения в данные XML, которые я могу записать обратно в базу данных.

Когда пользователь переупорядочивает дерево, в dataProvider не регистрируется никаких изменений, и если dataDescriptor регистрирует эти изменения, я не знаю, как вернуть данные обратно. Метод dataDescriptor getData () вызывает параметр узла .... какой узел? Узел от своего собственного dataProvider ?? Я не понимаю Есть идеи?

Ответы [ 3 ]

1 голос
/ 07 апреля 2009

CookieOfFortune верна: если вы пытаетесь сделать больше, чем просто номинальное перетаскивание (например, обнаруживать изменения и распространять их в БД), вам, вероятно, придется работать с интерфейсом перетаскивания в дереве.

Вы также можете настроить слушателя так, чтобы он обнаруживал, когда дерево изменилось (например, произошел выбор). Это работает как для выбора, так и для перетаскивания.

Не зная, что вы делаете, вот небольшой код. Я только переопределил dragComplete только для того, чтобы показать, как можно обнаружить событие.

<?xml version='1.0'?>
<mx:Application xmlns:mx='http://www.adobe.com/2006/mxml' backgroundGradientColors='[0xFFFFFF,0xAAAAAA]'>

    <mx:Script>
        <![CDATA[
        import mx.events.DragEvent;
        import mx.controls.Alert;

        [Bindable]
        private var treeData:XML =
            <root>
                <node label="foo">
                    <node label="bar" />
                </node>
                <node label="baz">
                    <node label="buzz">
                        <node label="foobar" />
                    </node>
                </node>
            </root>;

        private function detectChange(event:Event):void {
            Alert.show("change detected!");
        }
        private function detectDragComplete(event:DragEvent):void {
            Alert.show("drag completed!");
        }

        ]]>
    </mx:Script>

  <mx:Tree id="tree" labelField="@label" 
           dataProvider="{treeData.node}" width="200"
           dragEnabled="true"
           dropEnabled="true"
           dragMoveEnabled="true"
           dragComplete="detectDragComplete(event)"
           change="detectChange(event)" />
</mx:Application>

Вот несколько ссылок с дополнительной информацией о функциональности перетаскивания в различных элементах управления:

1 голос
/ 07 апреля 2009

Я считаю, что вам нужно прослушать событие dragOver и манипулировать полученными данными в этом обработчике. Поддержка перетаскивания в основном предназначена для переноса из одного элемента управления списком в другой элемент управления.

0 голосов
/ 08 мая 2009

Я должен был сделать то же самое. Я настроил прослушиватель событий в dataProvider для дерева в событии CollectionEvent.COLLECTION_CHANGE.

public function init():void{

        //watch the tree dataProvider changes.
        BindingUtils.bindSetter(setUpDataChangeListner,_tree,["dataProvider"]);
    }

    public function setUpDataChangeListner(value:XMLListCollection):void{
        //set up the event listener for the dataProvider as long as it is not null
        if(value)
            value.addEventListener(CollectionEvent.COLLECTION_CHANGE,onTreeChanged,false,0,true);
    }

    public function onTreeChanged(event:CollectionEvent):void{
        trace("fun");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...