Как переопределить метод набора данных при использовании пользовательских объектов класса в провайдере данных сетки - PullRequest
1 голос
/ 29 марта 2011

* Оповещение новичка *

У меня есть AdvancedDataGrid с 5 столбцами.Второй столбец с метками заголовка должен содержать несколько строк в каждой ячейке.

Первоначально поставщик данных моей сетки был определен следующим образом:

[Bindable]
public var mappedTagsArray:ArrayCollection = new ArrayCollection( [ 
    { name: "garbage-garbage", semanticTags: "garbage-flirt\ngarbage-garbage\ngarbage-noise\ngarbage-profanity", exitStrategy: "Fallback", confirmationMode: "IF NECESSARY", confirmationPromptlet: "cp5" }, 
    { name: "report-sim", semanticTags: "enquire-sim\nreport-sim", exitStrategy: "Direct", confirmationMode: "NEVER", confirmationPromptlet: "cp6" }
] );

Была определена метка столбцовследующим образом, с встроенным компонентом TextArea для обработки нескольких строк в одной ячейке:

<mx:AdvancedDataGridColumn id="semanticTags" headerText="Labels" dataField="semanticTags" editable="false">
    <mx:itemRenderer>
        <fx:Component>
            <mx:HBox horizontalScrollPolicy="off" verticalScrollPolicy="off"
                                             top="0" bottom="0" right="0" left="0">
                <fx:Script>
                    <![CDATA[
                        import com.nuance.csportal.mw_api.CallerIntent;
                        public function get value() : String
                        {
                            return ta_labels.text;
                        }
                        override public function set data(value:Object):void
                        {
                            super.data = value;
                            ta_labels.text = value.semanticTags;
                        }
                    ]]>
                </fx:Script>
                <!-- BUG: Scroll bar is fixed in one location; does not move with resizing of cell -->
                <s:TextArea id="ta_labels" heightInLines="2" editable="false" borderVisible="false"
                                                    horizontalScrollPolicy="auto" verticalScrollPolicy="auto" contentBackgroundAlpha="0"
                                                    top="0" bottom="0" right="0" left="0"/>
            </mx:HBox>                                      
        </fx:Component>
    </mx:itemRenderer>
</mx:AdvancedDataGridColumn>

В этом случае несколько строк semanticTags отображаются в ячейке столбца Labels.


Теперь я создал собственный класс ActionScript с именем CallerIntent:

package com.nuance.csportal.mw_api
{
    import mx.controls.List;

    public class CallerIntent
    {
        public function CallerIntent( id:int, name:String, semanticTags:Array, exitStrategy:String, confirmationMode:String, confirmationPromptlet:String )
        {
            this.id = id;
            this.name = name;
            this.semanticTags = semanticTags;
            this.exitStrategy = exitStrategy;
            this.confirmationMode = confirmationMode;
            this.confirmationPromptlet = confirmationPromptlet;
        }

        public var id:int;
        public var name:String;
        public var semanticTags:Array;
        public var exitStrategy:String;
        public var confirmationMode:String;
        public var confirmationPromptlet:String;
    }
}

И в моем методе init (), который вызывается при creationComplete моей формы, я заполняю поставщик данных своей сетки:

public function init( event:Event ):void
{
    var st1:Array = new Array( "garbage-flirt", "garbage-garbage", "garbage-noise", "garbage-profanity" );
    var st2:Array = new Array( "enquire-sim", "report-sim" );
    var ci1:CallerIntent = new CallerIntent( 1, "garbage-garbage", st1, "Fallback", "IF NECESSARY", "cp1" );
    var ci2:CallerIntent = new CallerIntent( 2, "report-sim", st2, "Direct", "NEVER", "cp2" );

    mappedTagsArray.addItem( ci1 );
    mappedTagsArray.addItem( ci2 );
}

В этом сценарии мое приложение аварийно завершает работу с методом данных набора переопределений в ta_labels.text = value.semanticTags;с Не удается получить доступ к свойству или методу пустой ссылки на объект.

Это правда - значение остается нулевым, когда я использую ArrayCollection объектов CallerIntent, в отличие от ArrayCollection безымянных объектов (в данном случае значениебудет содержать безымянный объект).

Я попытался изменить сигнатуру функции, чтобы переопределить общедоступные данные набора функций (значение: CallerIntent): void и получил несоответствующее переопределение.

Есть идеи?Спасибо!Бонни

1 Ответ

1 голос
/ 29 марта 2011

Я исправил свою проблему.Поставщик данных моей сетки заполняется ПОСЛЕ того, как сначала вызывается переопределенный набор данных.Следовательно, я просто должен был поместить

 if ( value != null )

вокруг этого кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...