2012-05-15 3 views
0

У меня есть 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 имеет тип функции. myLabelField внутри AssociatedDocumentsPM является публичной функцией.

Контекст файл Петрушка в родителю указанного выше файла и объявляет ПМ следующим образом:

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

Таким образом, проблема заключается в следующем:

Когда я отладки приложения и проверьте columnList в DataGrid, переменная modifyLabelField равна нулю.

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

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

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

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

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

+0

Не ответ на ваш вопрос, а наблюдение: вы не должны расширять GridColumn, если вы не хотите изменять или добавлять его функциональность. Вряд ли в этом есть необходимость. Недавно у меня было [аналогичное обсуждение] (http://stackoverflow.com/questions/10520158/flex-application-is-confused-when-passing-variables-to-custom-component). – RIAstar

ответ

0

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

<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 функция объявлена ​​Bindable, вы увидите 3 раза «ААА». Если вы удалите метаданные Bindable, вы увидите «A», «B», «C».

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