Jason Chu wrote:
> I'm now trying to migrate our code from 0.9a4 to 0.9a6. Now if I do a
> self.variable inside a widget and variable is callable, the
> widget's metaclass will call variable() and return its value. Couple
> that with widgets being callable and I can no longer pass references to
> my internal widgets around.
>
> Where do I do this? Just about every custom edit form that we have.
> We use params (used to be template_vars) to be able to refer to widgets
> by name inside a template. Obviously, we also pass the widgets in
> as the fields argument to the __init__ function so that value_for and
> options_for still works.
>
> Here is an example:
>
> params = ['name', 'priority', 'duedate', 'duetime', 'summary',
> 'description', 'completed', 'typeList']
>
> def __init__(self, *args, **kw):
> self.priority =
> widgets.SingleSelectField(name='Priority', options=...,
> validator=...)
> self.duedate =
> CalendarDatePicker('Due Date')
> self.summary = widgets.TextField(name='Summary',
> validator=...)
> self.description = widgets.TextArea(name='Description')
> self.completed = widgets.CheckBox(name='Completed',
> validator=...)
> self.typeList =
> TypeList(name='Types', numCols=1, options=model.getUserTags)
>
> fields =
> [self.priority,self.duedate,self.summary,self.description,self.completed,self.typeList]
>
> super(TodoEditForm, self).__init__(fields=fields, *args, **kw)
>
> I've edited it for brevity, but you get the idea. The fields = [] part
> is where I run into problems. Because self.priority is a callable,
> it's called, and its value is returned instead of the reference to it.
>
> Before I go and change every reference to every widget in every form,
> how exactly am I supposed to do something like this? I want to be able
> to get to each of my widgets by some name inside the template, but
> still have them play nicely with all the form stuff.
>
Hi Jason,
you should not use "params" when you are working with widgets inside
another widgets, this means you have a CompoundWidget and what you must
use is "member_widgets" not "params".
member_widgets works just like params but it doesn't handle callables
automatically and you can override them only at init not
render/display time, this makes sense since you're going to instantiate
a widget during a request...
http://trac.turbogears.org/turbogears/wiki/StatelessWidgets
Ciao
Michele
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/turbogears
-~----------~----~----~----~------~----~------~--~---