[jifty-devel] Custom input processing on custom subclassed form fields

Jesse Vincent jesse at bestpractical.com
Wed Sep 27 20:49:09 EDT 2006


I've been meaning to reply to this for um. a couple weeks now, but I
keep not getting to it.  I do think you're 100% right that a
Jifty::Web::Form::Field should have some sort of post-handler. I guess
the problem comes in that there isn't a way to know what form field
class rendered a given argument. 

-jesse


On Sun, Sep 10, 2006 at 02:07:18PM -0400, Sean E. Millichamp wrote:
> I decided to look at creating a custom form field after seeing the Wifty
> commit where the custom 'WikiPage' field was implemented.
> 
> I succeeded in creating it for the display-side, but I feel that there
> should also be a hook for the post-side where the custom field can
> influence the argument_value that the Action sees.
> 
> I looked at trying to implement this by trying to add a
> 'field_argument_processing' function in Jifty::Web::Form::Field that, by
> default, did nothing, and that was hooked in either when the incoming
> form values were processed or when fetching the value with
> argument_value in J::Action.  However, as both places were for incoming
> data there were no existing references to the J:W:F:F objects and to
> create an action to get the render_as, just to then create a J:W:F:F
> object for the sole purpose of calling the function did not seem like
> the right way of doing it.
> 
> I would like to solicit advice on if this is a bad idea (and why) and if
> it is a good idea (or, at least, not a bad one :), what the best
> place/way to do this in Jifty cleanly would be.  If someone can point me
> in the right spots I will try to add it as a real feature.
> 
> Why would this be useful?
> 
> Take, for example, an application that has to deal with USD currency
> values throughout.  Due to floating point issues, the safest way to
> store and manipulate USD currency seems to be to store and manipulate it
> as cents (an integer).  However, people are used to relating to it in
> terms of dollars and fractions of dollars.
> 
> Right now, this seems problematic with Jifty.  To make sure amounts are
> always stored in the DB tables as integers you can do before_set_*
> functions to multiply the values by 100 and after_ to divide by 100.
> However, that means that if you want to do integer math between two
> different fields you must manually multiple each value by 100 and then
> divide the result before storing it.  Okay, so then you say "I will just
> treat it as an integer/cents throughout".  For display you can create a
> Mason filter method for normal display and create a custom form field
> for field_value displays.  
> 
> This seems ideal until you get to data entry.  For data entry from forms
> you still need to be sure to multiply by 100 at every form entry point
> in every action (thus violating the tenant of DRY).  If you have a lot
> of actions/fields throughout the app that are currency fields that
> leaves a lot of duplication and a lot of opportunity for forgetting to
> perform the conversion.  There is no way that I can see where you can
> globally associate any incoming processing with a field type like you
> can on the outgoing side.
> 
> I'm looking forward to feedback, thanks!
> 
> Sean
> 



> _______________________________________________
> jifty-devel mailing list
> jifty-devel at lists.jifty.org
> http://lists.jifty.org/cgi-bin/mailman/listinfo/jifty-devel


-- 


More information about the jifty-devel mailing list