2012-11-04 64 views
0

我有一個datagrid,它在主應用程序中有3列。在第三列中,我想使用項目渲染器,我想在其中使用包含兩個組件的hbox。一個是一個按鈕,一個是標籤。我在主應用程序中也有一個滑塊。我想使用滑塊(使用數據網格的地方)從主應用程序文件中更改itemrenderer按鈕的alpha值。我可以使用data屬性訪問項目渲染器中的數據提供程序屬性。但是,如何訪問父應用程序屬性。爲此,我嘗試創建自定義數據網格並使用數據綁定傳遞滑塊的值。但無法訪問該屬性。在列表中,當我做同樣的事情時,我可以使用item renderer的listData屬性訪問屬性,但是在datagrid中我無法這樣做。如何訪問項目渲染器內的父應用程序屬性

回答

1

我怎麼訪問父應用程序性能

一般;我會建議你不要。 itemRenderer應該能夠通過數據元素訪問它需要的所有屬性;這涉及到dataProvider。

這是訪問顯示層次結構中位置較高的組件屬性的封裝中斷。

也就是說,這有很多方法。

要訪問主應用程序,您可以使用FlexGlobals.topLevelApplication訪問頂層應用程序。

您可以將滑塊值存儲爲靜態變量,然後通過itemRenderer以這種方式訪問​​它。

您可以將滑塊值存儲在某個數據/模型對象中,並使用依賴注入框架(如SwizRobotlegs)將該數據/模型對象注入到itemRenderer中。

+1

+1對你不應該這樣做。我還會補充一點,您可以創建一個ClassFactory並使用它爲渲染器提供對滑塊或可反映其值的可綁定數據對象的引用。 –

+0

我有一個使用ClassFactory發送屬性的盲點。不知道爲什麼;我總是忘記那裏。 – JeffryHouser

+0

@AmyBlankenship如何使用ClassFactory來訪問父應用程序的屬性。通過使用listData屬性可以實現相同的目標嗎?我已經用代碼問了幾天同樣的問題。它的鏈接是http://stackoverflow.com/questions/13109821/how-to-access-the-listdata-property-in-item-renderer-for-datagrid-in-flex-4 – nitin

1

,如果你要訪問的外部屬性,你可以使用添加outerDocument的itemRenderer的內部,例如:

//代碼

 public var str:String = "Test"; 
     [Bindable] private var arr:Array = [ 
      {field:'ROW1'}, 
      {field:'ROW2'}, 
      {field:'ROW3'}     
     ]; 

// MXML

<mx:DataGrid id="grid" width="100%" height="100%" dataProvider="{arr}"> 
    <mx:columns> 
     <mx:DataGridColumn dataField="field"> 
      <mx:itemRenderer> 
       <mx:Component> 
        <mx:Label text="{data.field + ' ' + outerDocument.str}"/> 
       </mx:Component> 
      </mx:itemRenderer> 
     </mx:DataGridColumn> 
    </mx:columns> 
</mx:DataGrid> 

URL顯示了我所說的一個很好的例子。 我希望這會有所幫助。

+0

在我的情況下,渲染器在其他文件中。我需要在用戶拖動滑塊時訪問滑塊的值。基於滑塊的當前值我想設置設置數據函數中的邏輯。 – nitin