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
-~----------~----~----~----~------~----~------~--~---

Reply via email to