Title: renaming mediators - why not? Post by: sirGordon on February 16, 2011, 12:04:22 lets say i have an application where users can edit documents
every document gets a unique id once it has been saved the document cannot be opened if already open by the user i have a facade for document edit module when a user opens a document, a document edit mediator is created and registered with mediatorName = document id the problem begins: 1. user clicks "create new document", which does not have an id yet 2. a new document edit window is opened with lets say some UID as temporary mediatorName 3. user saves the document and does not close it 4. user tries to open the same document and succeeds, becuause i check facade.hasMediator(<id of the document>) which returns false i dont want to double-check / keep my own window map / stuff like that, i'd rather just rename the mediator. for this purpose ive extended puremvc a bit here is all i wrote: public class ExtendedFacade extends Facade { so i have two questions 1. How bad is this solution? Is there a better one? 2. Would it cause any bugs in puremvc that i didnt notice? thanks in advance! Title: Re: renaming mediators - why not? Post by: puremvc on February 16, 2011, 01:30:29 I don't understand why you want to rename the mediator, which actor would invoke the renaming and when you'd be doing it.
i check facade.hasMediator(<id of the document>) which returns false This tells me that you either... 1) failed to supply the id of the document in the call to super in your mediator subclass' constructor, 2) you created the name differently when the mediator was registered than when you check for it, 3) the id you have in hand when you're calling facade.hasMediator(<id of the document>) is not correct. 4) the mediator has already been removed by the time you're calling facade.hasMediator(<id of the document>) If you register a mediator with a given name, facade.hasMediator will always return true if you supply it the name the mediator was registered with AND it hasn't been removed. -=Cliff> Title: Re: renaming mediators - why not? Post by: sirGordon on February 16, 2011, 11:24:10 exactly, Cliff! My case is number 2)
because the document does not have an id before it is saved to database, the document edit mediator name is set using UIDUtil.getUID() - as a temporary mediatorName the problem is, when the user saves the document, i need to reset mediatorName to the newly received (from database) document id, so hasMediator(<document id>) would return "true" upon receiving document id, mediator will change its name itself Title: Re: renaming mediators - why not? Post by: puremvc on February 20, 2011, 11:43:25 Then do this:
1) Have the old mediator be interested in a notification which has the new id as the note body or type. 2) Handle the note by registering a new mediator with the new name, passing it the view component 3) Have the old mediator remove itself 4) Have the mediator's onRemove method remove all event listeners from the view component and set it to null, so that the old mediator will be GC'd -=Cliff> |