Re: Scoping constructs Block, Module, ModuleBlock
- To: mathgroup at smc.vnet.net
- Subject: [mg111533] Re: Scoping constructs Block, Module, ModuleBlock
- From: Michael <michael2718 at gmail.com>
- Date: Wed, 4 Aug 2010 05:50:46 -0400 (EDT)
On 7/26/2010 11:34 AM, John Fultz wrote: > On Mon, 26 Jul 2010 11:06:56 -0700, Michael wrote: >> I'm seeing a similar thing happen when I use DynamicModule: >> >> xyz = "A"; >> f[] := DynamicModule[{tmp = "A"}, >> CreateDialog[{ >> PopupMenu[Dynamic[tmp], {"A", "B", "C", "D"}], >> PopupMenu[Dynamic[xyz], {"A", "B", "C", "D"}] >> }] >> ]; >> Button["Test", f[]] >> >> If I click on the "Test" button, I don't see the value of "tmp" being >> changed when I pick different options from the pop up menu, but I *do* >> see the value of "xyz" being changed when I pick different options from >> its pop up menu. >> >> However, if I execute f[] directly, it works for both cases. Shouldn't >> clicking the button produce identical results to calling whatever is >> defined for its action? There seems to be something related to using a >> dynamic module variable, perhaps it loses its definition during a Button >> call or something. > > You need to read up on DynamicModule wormholes. > [...] Sorry, guess I wasn't specific enough about the problem. I don't care about sharing the value of tmp outside the scope of the dialog box, I just want the dialog box's popup menu to reflect the value I select. Turns out the solution was simple and does not involve dynamic wormholes: I apparently put the DynamicModule in the wrong place: outside the CreateDialog instead of *inside*. Switching the two gets this: xyz = "A"; f[] := CreateDialog[ DynamicModule[{tmp = "A"}, Column[{ PopupMenu[Dynamic[tmp], {"A", "B", "C", "D"}], PopupMenu[Dynamic[xyz], {"A", "B", "C", "D"}] }] ]]; Button["Test", f[]] Now both pop-up menus behave the same. > Sincerely, > > John Fultz > jfultz at wolfram.com > User Interface Group > Wolfram Research, Inc. Best Regards, Michael