У меня есть NavigatorContent, который отображается, когда пользователь выбирает элемент в DataGrid.Этот NavigatorContent содержит форму и аккордеон, отображающий связанные объекты.
Когда пользователь нажимает кнопку «Сохранить» в NavigatorContent, форму и дочерние элементы следует сохранить в базе данных, вызвав сервер через BlazeDS:
saveObjectToDB()
{
//Map the form values to the object
object.field1 = object_field1.text;
object.field2 = object_field2.selectedDate as Date;
object.relatedobject3 = comboBox.selectedItem as RelatedObject3;
//etc.....
//Loop through accordion to save the child objects
for(var i:int= 0; i < accordion.numChildren; i++ )
{
if(accordion.getChild(i) is RelatedObject1Form)
{
var formRelated1:RelatedObject1Form = accordion.getChild(i) as RelatedObject1Form;
//Map the form values to the related object
object.relatedobject1.field1 = formRelated1.relatedobject1_field1.selectedDate;
//etc...
}
if(accordion.getChild(i) is RelatedObject2Grid)
{
var gridRelated2:RelatedObject2Grid = accordion.getChild(i) as RelatedObject2Grid;
//Get dataProvider for the datagrid of the relatedObject
object.relatedobject2 = gridRelated2.object.relatedobject2;
}
}
// Call the remoting object's saveObject method
var saveObjectOperation:Operation = new Operation();
saveObjectOperation.name = "saveObject";
saveObjectOperation.arguments=[object];
ro.operations = [saveObjectOperation];
saveObjectOperation.send();
if(isNewObject)
//dispatchEvent new object
else
//dispatchEvent object updated
}
Моя проблема заключается в том, что вопрос гласит, что мое приложение зависает на несколько секунд, когда пользователь нажимает кнопку сохранения, вызывающую этот метод.Я предполагаю, что это потому, что Flex является однопоточным, но все же я не совсем понимаю, почему этот метод будет настолько вычислительно дорогим?Кажется, это не имеет значения, если я закомментирую цикл, который зацикливается на потомках аккордеона.
Я пытался установить нулевые объекты, связанные с объектами, перед вызовом метода удаленного сохранения, и это, казалось, ускорило метод сохранения,но позже у меня возникли некоторые проблемы.
Мой вывод заключается в том, что удаленный вызов приводит к зависанию приложения, и если я устанавливаю для связанных объектов значение null, это, похоже, решает проблему.Но действительно ли это необходимо?Связанные объекты на самом деле не такие большие, поэтому я не совсем понимаю, почему удаленный вызов должен заморозить приложение на несколько секунд.
Вот как я создаю дочерние элементы аккордеона, когда инициализируется NavaigatorContent:
var relatedObjectForm:RelatedObject1Form= new RelatedObject1Form();
accordion.addChild(relatedObjectForm);
relatedObjectForm.object= object;
relatedObjectForm.ro = this.ro;
Объект , который я передаю дочерним элементам аккордеона, является общедоступным и [Bindable] в NavigatorContent и дочерних элементах аккордеона и первоначально передается из основной DataGrid.Может ли это быть проблемой, связанной с этой проблемой?
Любая помощь / комментарии высоко ценится.Эта проблема начинает влиять на мою красоту сна;)