Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите вынести компонент из xmxl в as, На основе готового кода. 
V
    Опции темы
vintyara
Дата 13.8.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 24.3.2005
Где: Ode$$a

Репутация: нет
Всего: 2



Я только учусь smile Нашел один интересный для меня пример в интернете. Вот он:

MXML:
Код

<?xml version="1.0" encoding="utf-8"?>
<mx:Application
                xmlns:mx="http://www.adobe.com/2006/mxml"
                xmlns:controls="com.themorphicgroup.controls.*"
                layout="absolute" viewSourceURL="srcview/index.html">
        <mx:Script>
                <![CDATA[
                        [Bindable]
                        private var _players:Array = [
                                {number:56, first:"Joe", last:"Blanton"},
                                {number:62, first:"Carlos", last:"Carrasco"},
                                {number:55, first:"Clay", last:"Condrey"},
                                {number:37, first:"Chad", last:"Durbin"},
                                {number:47, first:"Scott", last:"Eyre"},
                                {number:35, first:"Cole", last:"Hamels"},
                                {number:43, first:"J.A.", last:"Happ"},
                                {number:54, first:"Brad", last:"Lidge"},
                                {number:46, first:"Ryan", last:"Madson"},
                                {number:48, first:"Robert", last:"Mosebach"},
                                {number:50, first:"Jamie", last:"Moyer"},
                                {number:39, first:"Brett", last:"Myers"},
                                {number:61, first:"Chan Ho", last:"Park"},
                                {number:59, first:"Michael", last:"Zagurski"},
                                {number:27, first:"Chris", last:"Coste"},
                                {number:23, first:"Ronny", last:"Paulino"},
                                {number:51, first:"Carlos", last:"Ruiz"},
                                {number:4, first:"Eric", last:"Bruntlett"},
                                {number:19, first:"Greg", last:"Dobbs"},
                                {number:7, first:"Pedro", last:"Feliz"},
                                {number:6, first:"Ryan", last:"Howard"},
                                {number:11, first:"Jimmy", last:"Rollins"},
                                {number:26, first:"Chase", last:"Utley"},
                                {number:29, first:"Raul", last:"Ibanez"},
                                {number:10, first:"Geoff", last:"Jenkins"},
                                {number:40, first:"John", last:"Mayberry"},
                                {number:12, first:"Matt", last:"Stairs"},
                                {number:8, first:"Shane", last:"Victorino"},
                                {number:28, first:"Jayson", last:"Werth"}
                        ];
                ]]>
        </mx:Script>
        <mx:VBox verticalCenter="0" horizontalCenter="0" width="500" height="500">
                <mx:HBox width="100%">
                        <mx:Label text="Page {dataGrid.page + 1} of {dataGrid.pageCount}"/>
                        <mx:Spacer width="100%"/>
                        <mx:Button label="Previous"
                                        enabled="{!dataGrid.isFirstPage}"
                                        click="{dataGrid.page--}"/>
                        <mx:Button label="Next"
                                        enabled="{!dataGrid.isLastPage}"
                                        click="{dataGrid.page++}"/>
                        <mx:Button label="Go To:"
                                        click="{dataGrid.page = int(goToPageInput.text) - 1}"/>
                        <mx:TextInput id="goToPageInput" width="50"/>
                </mx:HBox>
                <controls:PaginatedDataGrid id="dataGrid" width="100%"
                                draggableColumns="false"
                              entireDataProvider="{_players}"
                                pageSize="5">
                        <controls:columns>
                                <mx:DataGridColumn dataField="number" width="100"/>
                                <mx:DataGridColumn dataField="first"/>
                                <mx:DataGridColumn dataField="last"/>
                        </controls:columns>
                </controls:PaginatedDataGrid>
        </mx:VBox>
</mx:Application>




И AS для него:
Код

package com.themorphicgroup.controls {

        import mx.collections.ArrayCollection;
        import mx.collections.Sort;
        import mx.collections.SortField;
        import mx.controls.DataGrid;
        import mx.controls.dataGridClasses.DataGridColumn;
        import mx.core.mx_internal;
        import mx.events.DataGridEvent;

        use namespace mx_internal;

        /**
         * PaginatedDataGrid is a DataGrid that displays in pages instead of a single list.
         */
        public class PaginatedDataGrid extends DataGrid {

                private var _page:int = 0;

                [Bindable(event="pageChanged")]
                public function get page():int {
                        return _page;
                }

                public function set page(value:int):void {
                        _page = Math.max(Math.min(value, pageCount - 1), 0);
                        populatePage(_page);
                        dispatchEvent(new Event("pageChanged"));
                        dispatchEvent(new Event("isFirstPageChanged"));
                        dispatchEvent(new Event("isLastPageChanged"));
                }

                [Bindable(event="isFirstPageChanged")]
                public function get isFirstPage():Boolean {
                        return (page == 0);
                }

                [Bindable(event="isLastPageChanged")]
                public function get isLastPage():Boolean {
                        return (page == (pageCount - 1));
                }

                [Bindable(event="pageCountChanged")]
                public function get pageCount():int {
                        var count:int = 0;
                        if (_entireDataProvider) {
                                count = Math.max(Math.ceil(_entireDataProvider.length / pageSize), 0);
                        }
                        return count;
                }

                [Bindable]
                public function get pageSize():int {
                        return rowCount;
                }

                public function set pageSize(value:int):void {
                        rowCount = value;
                }

                protected var _entireDataProvider:Array;

                /**
                 * Use entireDataProvider instead of dataProvider as dataProvider is used internally to
                 * represent data for a single page. entireDataProvider currently only supports Arrays.
                 */
                [Bindable]
                public function get entireDataProvider():Array {
                        return _entireDataProvider;
                }

                public function set entireDataProvider(value:Array):void {
                        _entireDataProvider = value;
                        _entireCollection.source = value;
                        dispatchEvent(new Event("pageCountChanged"));
                        page = 0;
                }

                override public function set dataProvider(value:Object):void {
                        throw new Error("dataProvider is set internally by PaginatedDataGrid. Use entireDataProvider.");
                }

                protected var _entireCollection:ArrayCollection;

                protected var _pageDataProvider:Array;

        protected var _savedSortIndex:int;

        protected var _savedSortDirection:String;

                public function PaginatedDataGrid() {
                        super();
                        _entireCollection = new ArrayCollection();
                        _pageDataProvider = new Array();
                addEventListener(DataGridEvent.HEADER_RELEASE, headerReleaseHandler);
                }

                /**
                 * Populates the dataProvider with data for the given page from entireDataProvider.
                 */
                protected function populatePage(pageNum:int):void {
                        if (_entireDataProvider == null) {
                                return;
                        }
                        var start:int = pageNum * pageSize;
                        var end:int = start + pageSize;
                        end = Math.min(_entireCollection.length, end);
                        _pageDataProvider.splice(0);
                        for (var i:int = start; i < end; i++) {
                                _pageDataProvider.push(_entireCollection.getItemAt(i));
                        }
                        super.dataProvider = _pageDataProvider;
                        // apply sorting that was lost due to dataProvider change
                        if (_savedSortDirection != null) {
                                sortIndex = _savedSortIndex;
                                sortDirection = _savedSortDirection;
                        }
                }

                protected function headerReleaseHandler(event:DataGridEvent):void {
                        event.preventDefault();
                        sortByColumn(event.columnIndex);
        }

                protected function sortByColumn(index:int):void {
                        /*
                         * Logic nearly entirely taken from DataGrid.sortByColumn().
                         */

                    var c:DataGridColumn = columns[index];
                var desc:Boolean = c.sortDescending;

                // do the sort if we're allowed to
                if (c.sortable) {
                    var s:Sort = _entireCollection.sort;
                    var f:SortField;
                    if (s) {
                        s.compareFunction = null;
                        // analyze the current sort to see what we've been given
                        var sf:Array = s.fields;
                        if (sf) {
                            for (var i:int = 0; i < sf.length; i++) {
                                if (sf[i].name == c.dataField) {
                                    // we're part of the current sort
                                    f = sf[i]
                                    // flip the logic so desc is new desired order
                                    desc = !f.descending;
                                    break;
                                }
                            }
                        }
                    } else {
                        s = new Sort;
                    }
                    if (!f) {
                        f = new SortField(c.dataField);
                    }

                    c.sortDescending = desc;
                    var dir:String = (desc) ? "DESC" : "ASC";
                    sortDirection = dir;

                    // set the grid's sortIndex
                    lastSortIndex = sortIndex;
                    sortIndex = index;

                                // save sort information to be applied when dataProvider changes
                                _savedSortIndex = sortIndex;
                                _savedSortDirection = sortDirection;

                    // if you have a labelFunction you must supply a sortCompareFunction
                    f.name = c.dataField;
                    if (c.sortCompareFunction != null) {
                        f.compareFunction = c.sortCompareFunction;
                    } else {
                        f.compareFunction = null;
                    }
                    f.descending = desc;
                    s.fields = [f];
                }
                _entireCollection.sort = s;
                _entireCollection.refresh();
                populatePage(page);

            }

        }
}


Простите за такой большой пример smile Собственно задача, которую я не могу решить - вынести кнопочки Next, Prev и GoTo в другой MXML и сделать его инклуд в AS. Т.е. это будет аля компонентик такой, для вызова которого нужно будет лиш сделать

Код

<controls:PaginatedDataGrid id="dataGrid" width="100%"
                                draggableColumns="false"
                              entireDataProvider="{_players}"
                                pageSize="5">
                        <controls:columns>
                                <mx:DataGridColumn dataField="number" width="100"/>
                                <mx:DataGridColumn dataField="first"/>
                                <mx:DataGridColumn dataField="last"/>
                        </controls:columns>
                </controls:PaginatedDataGrid>


И оно нарисует нам табличук и пагинатор к ней. Т.е. минимум кода в приложении, все должно лежать в отдельном компоненте.

Собсвенно выносил я кнопочки, пытался ипортить их в AS. Но появлялись ошибки в MXML с кнопками, ругалось на куски кода подобные этому:

Код

 click="{dataGrid.page--}"/>


Прошу дать на водку smile

Добавлено через 1 минуту и 9 секунд
Включил уведомления на почту
PM MAIL ICQ   Вверх
vintyara
Дата 14.8.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 24.3.2005
Где: Ode$$a

Репутация: нет
Всего: 2



Да smile Смотрю форум уже не так популярен, как раньше..

Собсно решение такое - выносим наши кнопочки в отдельный компонент, и вызываем его так:

Код

<controls:PaginatedDataGrid id="dataGrid" width="100%"   ...    >
...
</controls:PaginatedDataGrid>

<mx1:PaginatedControlBox dataGrid="{dataGrid}"/>   <--- вот наш компонент


Добавлено через 43 секунды
да, в компоненте не забываем сдлелать что-то типа такого:

Код

<mx:Script>
        <![CDATA[
         [Bindable]
            public var dataGrid;
        ]]>
    </mx:Script>

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Flex | Следующая тема »


 




[ Время генерации скрипта: 0.0438 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.