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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.