Привязка функции не установлена ​​после внедрения модели

У меня есть CustomDataGrid, который расширяется от DataGrid и CustomDataGridColumn, который расширяется от DataGridColumn.

CustomDataGridColumn имеет переменные-члены типа Function.

В моем представлении я ввожу презентационную модель, используя петрушку.

Код выглядит следующим образом:

<fx:Declarations> 
        <spicefactory:Configure/> 
    </fx:Declarations> 

<fx:Script> 

        [Inject(id="associatedDocumentsPM")] 
        [Bindable] 
        public var model:AssociatedDocumentsPM; 


</fx:Script> 

   <customDataGrid:CustomDataGrid id="AssocDocGrid" 
                                   width="100%" height="{(documentDataList.length+2)*20}" 
                                   doubleClickEnabled="true" enabled="{modeHandler.appEnable}" 
                                   dataP="{documentDataList}" 
                                   sortableColumns="false"> 
        <customDataGrid:columnList> 
            <customDataGrid:CustomDataGridColumn 
                textAlign="left" 
                dataFieldIdentifier="documentName" 
                headerText="Document Type" 
                modifyLabelField="{model.modifyLabelField}" 
                dataField="documentName" 
                isNaNZero="true" 
                showDataTips="true" 
                editable="false"/> 
                ...more columns here...  
       </customDataGrid:columnList>
    </customDataGrid:CustomDataGrid>

AssociatedDocumentsPM имеет определенные функции, которые задаются в столбцах.

Один из примеров - атрибут modifyLabelField="{model.modifyLabelField}"

CustomDataGridColumn.myLabelField имеет тип Function. myLabelField внутри AssociatedDocumentsPM - это общедоступная функция.

Файл контекста петрушки находится в родительском элементе указанного выше файла и объявляет PM следующим образом:

AssocDocPMFactory - это класс с единственной функцией, украшенной [Factory].

Итак, проблема в следующем:

Когда я отлаживаю приложение и проверяю список столбцов DataGrid, переменная modifyLabelField имеет значение null.

Обращаются ли привязки к функциям иначе, чем к переменным? Я использую Flex 4.5.1 вместе с Parsley 2.4.1

Я понимаю, что инъекция может произойти после вызова creationComplete, но я думал, что привязка позаботится об этом.

У меня такое ощущение, что модель - PM - имеет нулевое значение намного позже, и привязка функции не запускается.

Я также пробовал использовать FastInject, но безуспешно.

Это проблема с указателями функций и привязкой Flex?


person kkudi    schedule 15.05.2012    source источник
comment
Не ответ на ваш вопрос, а наблюдение: вам не следует расширять GridColumn, если вы не хотите изменить или добавить его функциональность. В этом практически нет необходимости. Недавно у меня было аналогичное обсуждение.   -  person RIAstar    schedule 16.05.2012


Ответы (1)


Нет, это не так. Если у вас есть сомнения такого рода, всегда полезно быстро создать простую изолированную тестовую ситуацию, которая проверяет ваше предположение. Я создал следующее, чтобы проверить вашу:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               creationComplete="onCreationComplete()" >

    <fx:Script>
        <![CDATA[
            private function onCreationComplete():void {
                test = function(item:*):String {
                    return "AAA";
                }
            }

            [Bindable]
            private var test:Function;
        ]]>
    </fx:Script>

    <s:List labelFunction="{test}">
        <s:dataProvider>
            <s:ArrayList>
                <fx:String>A</fx:String>
                <fx:String>B</fx:String>
                <fx:String>C</fx:String>
            </s:ArrayList>
        </s:dataProvider>
    </s:List>

</s:Application>

Если переменная test Function объявлена ​​Bindable, вы увидите 3 раза «AAA». Если вы удалите Bindable метаданные, вы увидите «A», «B», «C».

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

person RIAstar    schedule 16.05.2012