2011-07-27 20 views
0

我有內聯組件的問題。我想從另一個組件到達一個內聯組件。從第一個組件中,我想要更改第二個組件中名爲「Add」的linkbutton的「enable」值。儘管我給第二個「id」和「className」,我既不能達到也不能達到它的要素。有沒有辦法做到這一點?如何在flex中訪問內聯組件的元素?

*在第一個組件中,在「CodedDescriptionItemEditor」組件中有一個文本輸入。我想驗證它,並根據驗證啓用我上面提到的按鈕..

這些都在一個數據網格的方式。在datagrid中,總是有一行可以輸入數據,通過「添加」按鈕可以保存它。保存後,它似乎文本..

謝謝。

這裏是我的代碼:

<mx:columns> 
     <mx:DataGridColumn headerText="{Problem}" wordWrap="true" textAlign="left" sortable="false"> 
      <mx:itemRenderer> 
       <mx:Component> 
        <mx:VBox> 
         <mx:ViewStack selectedIndex="{outerDocument.index(data)}" > 
          <mx:HBox> 
           <mv:CodedDescriptionItemEditor id="editor" codePM="{outerDocument.problemListPanelPM.getProblemDescPM(data)}" 
            width="100%" styleName="phrFormItemInput"/> 
          </mx:HBox> 
          <mx:HBox> 
           <mv:CodedDescriptionItemRenderer id="renderer" codedDescPM="{outerDocument.problemListPanelPM.getProblemDescPM(data)}" /> 
          </mx:HBox> 
         </mx:ViewStack> 
        </mx:VBox> 
       </mx:Component> 
      </mx:itemRenderer> 
     </mx:DataGridColumn> 
     <mx:DataGridColumn headerText="" textAlign="center" editable="false" width="50" resizable="false" sortable="false"> 
      <mx:itemRenderer> 
       <mx:Component className="buttonColumn"> 
         <mx:ViewStack selectedIndex="{outerDocument.index(data)}" > 
          <mx:HBox horizontalAlign="center" width="100%"> 
           <mx:LinkButton id="Add" icon="@Embed('img/add.png')" 
            toolTip="{outerDocument.Add_Problem}" 
            click="outerDocument.addHandWritten()" 
            enabled="false" /> 
          </mx:HBox> 
          <mx:HBox horizontalAlign="center" width="100%"> 
           <mx:LinkButton id="Delete" icon="@Embed('img/delete.png')" 
            toolTip="{outerDocument.Remove_problem}" 
            click="outerDocument.removeProblem()"/> 
          </mx:HBox> 
         </mx:ViewStack>      
       </mx:Component> 
      </mx:itemRenderer>       
     </mx:DataGridColumn> 
    </mx:columns> 

回答

0

在這種情況下,你可能想在你的添加outerDocument isAddEnabled一個布爾值VAR和改變你的啓用,如下:

enabled="{outerDocument.isAddEnabled}" 

更改此isAddEnabled根據您的驗證標準。 由於您不希望將其應用於所有項目,請在dataProvider中保留一個屬性(首選)或維護與您的dataProvider(不推薦)相同長度的另一個集合。

1

在MXML內聯組件不是實例,但類。所以那種「達到」是沒有意義的。爲了將這些知識結合在一起來操作它們,我向你推薦以下簡單的規則(我遵循並且沒有理解類/實例關係的問題):

不要在MXML中使用內聯組件, 原型階段。

所以你的情況我建議你到內嵌組件抽取到單獨的MXML類,並拋出所有outerDocument引用(你可以用與事件冒泡替換它們)。之後,我認爲了解並改進您的設計並找到合適的解決方案會容易得多。

另一個建議是使用數據驅動的方式來使用渲染器。這種方式是關於操作數據提供者的數據項,但不直接從外部文檔獲取和設置數據。使用數據綁定綁定不同列中不同項目渲染器之間更改的數據。

+0

「...將內聯組件提取到單獨的MXML類中......」我通常會嘗試這樣做,但是這次我沒有這樣做.. 感謝您的詳細建議:) – eaksan