ユーザーがDataGridでアイテムを選択すると表示されるNavigatorContentがあります。 この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に設定しようとしましたが、これが保存メソッドを高速化するように思えましたが、後でいくつかの問題が発生しました。
私の結論は、リモート呼び出しがアプリケーションをフリーズしているということです。関連するオブジェクトをnullに設定すると、これが問題を解決するようです。しかし、これは本当に必要ですか?関連するオブジェクトはそれほど大きくはないので、私はリモート呼び出しがアプリケーションを数秒間フリーズさせる理由を理解していません。
これはNavaigatorContentの初期化時に、私はアコーディオンの子を作成する方法である:私はアコーディオンの子どもたちに渡す
var relatedObjectForm:RelatedObject1Form= new RelatedObject1Form();
accordion.addChild(relatedObjectForm);
relatedObjectForm.object= object;
relatedObjectForm.ro = this.ro;
オブジェクトは公開されて、[バインド可能] NavigatorContentにし、アコーディオンの子どもたちに最初はメインのDataGridから渡されます。これはこの問題に関連する問題かもしれませんか?
ご意見やご感想をいただければ幸いです。この問題は、私の美しさの睡眠に影響を与え始めています;)
誰もこの種の問題を経験したことがありますか? =) – Sebastian