У меня есть довольно простая вещь: сетка данных, которая отображает некоторые элементы. щелчок по элементу вызовет всплывающий редактор (так как элемент имеет множество свойств и может не редактироваться прямо в сетке данных).
всплывающее окно содержит только форму и ссылку [Bindable] на элемент, который она редактирует (который передается из обработчика itemClick сетки данных). Значения формы по умолчанию принимаются путем привязки к соответствующим свойствам элемента с понятием {}, тогда как значения формы привязываются к элементу с помощью тегов mx: Binding.
а теперь проблема. когда всплывающее окно открывается в первый раз, все в порядке. однако, когда после закрытия всплывающее окно снова вызывается нажатием на тот же элемент, браузер зависает (на самом деле, из-за бесконечного запуска наблюдателей изменений, что приводит к переполнению стека или чему-то подобному).
у нас такое же поведение в 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;
}