Lazy synchronization and multiple subcomponents
Lazy synchronization and multiple subcomponents
- Subject: Lazy synchronization and multiple subcomponents
- From: Miguel Torres <email@hidden>
- Date: Fri, 26 Oct 2012 18:16:42 -0500
Hi List,
I recently begun using lazy synchronization. Chuck Hill solved some doubts that I had.
It works fine in cases Component -- > subcomponent.
But in cases Component --> subcomponent --> subcomponent is not working properly.
I have this scenario:
1. A memberCatalog component. (A grid with the member's information).
2. An editMember sub component with a "member" binding.
3. An editAddress sub component inside editMenber with an "address" binding.
Sub components 2 and 3 use lazy synchronization.
We have a navigation bar in editMember component with a Next Record button that calls a function that gets the next member and sets it to the object connected to the edit form.
This is the case where lazy synchronization is not working properly:
I have 2 members in my catalog.
I select the first one.
Both, editMember and editAddress loads properly. I see the correct information of the member and its address.
I click on Next Record button and this sequence occurs:
1. The request begins. The awake method of editAddress is called and all objects related to the bindings are set to null.
2. The awake method of editMember is called and all objects related to the bindings are set to null.
3. The address() method of editAddress is called several times (I do not know why) and because the address object was set to null previously, the address object is pull from the parent component. The problem is that the address that is set is the address of the actual member not the next member.
4. The nextRecord method is called and it gets the new member.
5. The request ends.
6. The response begins.
7. The member() method is called several times and it returns the correct member because it was set by the nextRecord method previously.
8. The address() method is called several times. The problem is that the address object is not null because of the call of the address() method (step 3) after the call of the awake method (step 2).
I solved it this way:
Each sub component has an initComponent object of the class Boolean that is set via bindings.
Each sub component has an initialize() method that is called by the appendToResponse method.
Inside the initialize() method we do task like filling NSArrays connected to popUpButtons, etc. The basic structure of the method is as follows:
private void initialize(){
if(initComponent){
//// Do my stuff
initComponent = false; // If the user submits the form but the record does not change initialize does nothing.
}
}
The change I made is that inside the initialize method I set to null the objects related to the bindings. That way every time I go to the next record I set the initComponent's objects to true and it forces the subcomponents to reset the objects related to the bindings and next time the address() method is called it pulls the correct address from the parent component.
I am not sure if I am solving a problem that was caused by a bad implementation of lazy synchronization. I have reviewed serveral times the documentation and my code and I can't find errors (But maybe I see what I want to see, I am kind of tired).
So, I will appreciated any comment.
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden