我有一個非常簡單的事情:呈現一些項目的數據網格。點擊一個項目會彈出一個彈出編輯器(因爲該項目有很多屬性,可能不會在數據網格中編輯)。datagrid項目彈出編輯器 - 掛起瀏覽器
彈出窗口只包含一個表單和[Bindable]引用它所編輯的項目(它是從datagrid的itemClick處理程序傳遞的)。通過使用{}概念綁定到相應的項目屬性來獲取表單的默認值,而使用mx:Binding標籤將表單值綁定回該項目。
和現在的問題。當彈出窗口第一次出現時,一切都很好。然而,當關閉彈出窗口後,通過點擊相同的項目再次出現,瀏覽器掛起(afaik因爲更改觀察者無休止地被觸發,導致stackoverflow或類似的東西)。
我們在Safari,IE和Chrome中有相同的行爲,所以我想這不是與瀏覽器相關的事情。從彈出窗口中的項目引用中刪除[Bindable]或從編輯器中刪除mx:Binding標記可以解決問題,但編輯不再起作用。
我已經把我的頭靠在牆上撞了好幾天了,但還是無法讓它工作。它是否會對某人敲響警鐘,在這裏有什麼可能是錯誤的(這可能會更容易)?
這裏的彈出窗口的代碼:
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" title="Details"
showCloseButton="true" close="PopUpManager.removePopUp(this);" creationComplete="PopUpManager.centerPopUp(this)">
<mx:Script>
<![CDATA[
import mx.managers.PopUpManager;
import my.Detail;
[Bindable] private var _documentDetail:Detail;
public function set documentDetail(value:Detail):void {
this._documentDetail = value;
}
public function set readOnly(value:Boolean):void {
if (value) {
this.currentState = "read-only";
}
}
]]>
</mx:Script>
<mx:states>
<mx:State name="read-only">
<mx:SetProperty target="{startDate}" name="enabled" value="false"/>
<mx:SetProperty target="{comments}" name="enabled" value="false"/>
</mx:State>
</mx:states>
<!--
<mx:Binding source="this.startDate.selectedDate" destination="_documentDetail.startDate"/>
<mx:Binding source="this.comments.text" destination="_documentDetail.comment"/>
-->
<mx:VBox width="100%" height="100%">
<mx:FormItem label="{resourceManager.getString('eRequestAppli','startdate')}:" labelWidth="160" width="100%">
<mx:DateField id="startDate" width="100%" selectedDate="{_documentDetail.startDate}" formatString="{resourceManager.getString('eRequestAppli', 'dateformat')}" editable="false"/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('eRequestAppli','comments')}:" labelWidth="160" width="100%" height="79">
<mx:TextArea id="comments" width="100%" height="100%" text="{_documentDetail.comment}" editable="false"/>
</mx:FormItem>
</mx:VBox>
</mx:TitleWindow>
這裏就是我稱之爲:
private function show(detail:Detail, readOnly:Boolean=false):void {
var popup:fxc_ProposalDetail =
fxc_ProposalDetail(PopUpManager.createPopUp(UIComponent(Application.application), fxc_ProposalDetail, true));
popup.documentDetail = detail;
popup.readOnly = readOnly;
}
一些示例代碼會有幫助,特別是負責設置綁定的示例代碼。 – 2010-09-10 08:40:17
添加了調用代碼和彈出代碼 – 2010-09-10 13:41:41