Yeah, I'm stuck. I don't know how to pass the request.vars.dpt correctly to my LOAD component.
Here's what I have now: controller def add_experience(): add_experience = crud.create(db.seafarer_experience, next=(URL('seafarer', 'profile')), _class='formstyle') return dict(add_experience=add_experience,dpt=request.vars.dpt) rank_populate.load {{if dpt:}} {{ranks = db(db.rank.department_id == dpt).select(orderby=db.rank.name)}} {{for r in ranks:}} {{=OPTION(r.name, _value=r.id)}} {{pass}} view <div class="w2p_fw"> <select class="generic-widget" id="seafarer_experience_rank" name="rank"> {{=LOAD('seafarer','rank_populate.load',ajax=True, vars={'dpt': request.vars.dpt})}} </select> </div> I tried vars={'dpt': dpt} also - and nothing. I'm confused. On Monday, June 17, 2013 11:11:49 AM UTC+2, villas wrote: > > Still isn't clear to me what you are doing. It seems to me that you > should use a separate function to return your Options. I would suggest > studying the Components section of the book. Use the web2py LOAD to get > the Options from a separate function. > > > > > On Monday, 17 June 2013 01:16:46 UTC+1, lesssugar wrote: >> >> Furthermore... strange. If I print the request.vars.dpt somewhere in the >> 'add_experience' function, the value is printed in the terminal every time >> I select an option the first drop-down. >> >> However, If I return this in the same function: >> >> ... >> ranks = db(db.rank.department_id == request.vars.dpt).select(orderby=db. >> rank.name) >> >> return dict(ranks=ranks) >> >> and then check if 'ranks' exists in my view - I get False... >> >> Do I need an Ajax call to somehow achieve my goal? >> >> On Monday, June 17, 2013 1:35:51 AM UTC+2, lesssugar wrote: >>> >>> Yes, I checked: the load function is being triggered and *dpt* variable >>> is being set in the function every time I select an option from the first >>> drop-down. >>> >>> The respective view fragment: >>> >>> <div class="w2p_fw"> >>> <select class="generic-widget" id="seafarer_experience_rank" >>> name="rank"> >>> {{=result}} >>> </select> >>> </div> >>> >>> (The HTML is fixed just for now, I've cut the dynamic code to test the >>> auto-populating only...) >>> >>> Not sure if I get the part about rendering "a complete page layout", >>> though, but it's a secondary issue for at this point. >>> >>> >>> On Monday, June 17, 2013 12:47:57 AM UTC+2, villas wrote: >>>> >>>> Hmm I'm not sure you have given enough info. Anyhow: >>>> >>>> Check in Firebug whether the load function is being triggered. >>>> Place print statements in your function to test that the variables are >>>> being set. >>>> Bear in mind that "return dict(...)" will render a complete page >>>> layout. I wonder if that is what you want? >>>> Check out the SELECT and OPTION helpers. >>>> >>>> >>>> On Sunday, 16 June 2013 23:10:12 UTC+1, lesssugar wrote: >>>>> >>>>> I need to auto-populate my 'ranks' drop-down based on the value >>>>> selected in the 'department' one. >>>>> >>>>> This is my script: >>>>> >>>>> <script> >>>>> $("#department").change(function() { >>>>> $("#ranks").load("?dpt=" + $("#department").val()); >>>>> }); >>>>> </script> >>>>> >>>>> As you can see, I pass *dpt *var to my current function. This is its >>>>> code: >>>>> >>>>> def add_experience(): >>>>> >>>>> ranks = db(db.rank.department_id == >>>>> request.vars.dpt).select(orderby=db.rank.name) >>>>> >>>>> result = "" >>>>> >>>>> for r in ranks: >>>>> result += "<option value='" + str(r.id) + "'>" + r.name + >>>>> "</option>" >>>>> >>>>> >>>>> return dict(result=XML(result)) >>>>> >>>>> When I select a value in the first drop-down, a request is being sent >>>>> to [controller]/add_experience?dpt=[value selected]. However the second >>>>> drop-down does not populate with respective data - it's empty. I'm >>>>> clearly >>>>> missing something. Any help? >>>>> >>>>> -- --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.