Thanks for sharing this.

Best regards,
Tom.

On Wednesday, November 25, 2020 at 4:44:40 AM UTC+1 roge...@gmail.com wrote:

> Glad you got it working.
>
> I send javascript from my controller back to the view for some custom 
> control widgets. That sounds similar to what you want to do.
>
> I dont know where i found the original code sample to do that - not in the 
> book I dont think. This page 
> http://www.web2pyslices.com/slice/show/1446/widget-select-or-add-option 
> you will see an example of how it can be done. To be honest I dont fully 
> understand how the wrapper works. But i got some nice custom controls 
> working nonetheless :)
>
>
>     def widget(self, field, value):
>         #generate the standard widget for this field
>         select_widget = OptionsWidget.widget(field, value)
>
>         #get the widget's id (need to know later on so can tell receiving 
> controller what to update)
>         my_select_id = select_widget.attributes.get('_id', None) 
>         add_args = [my_select_id] 
>         #create a div that will load the specified controller via ajax
>         form_loader_div = DIV(LOAD(c=self.controller, f=self.function, 
> args=add_args,ajax=True), _id=my_select_id+"_dialog-form", 
> _title=self.form_title)
>         #generate the "add" button that will appear next the options widget 
> and open our dialog
>         activator_button = A(T(self.button_text), 
> _id=my_select_id+"_option_add_trigger")
>         #create javascript for creating and opening the dialog
>         js = '$( "#%s_dialog-form" ).dialog({autoOpen: false, show: "blind", 
> hide: "explode", width: %s});' % (my_select_id, self.dialog_width)
>         js += '$( "#%s_option_add_trigger" ).click(function() { $( 
> "#%s_dialog-form" ).dialog( "open" );return false;}); ' % (my_select_id, 
> my_select_id)        #decorate our activator button for good measure
>         js += '$(function() { $( "#%s_option_add_trigger" ).button({text: 
> true, icons: { primary: "ui-icon-circle-plus"} }); });' % (my_select_id) 
>         jq_script=SCRIPT(js, _type="text/javascript")
>         wrapper = DIV(_id=my_select_id+"_adder_wrapper")
>         wrapper.components.extend([select_widget, form_loader_div, 
> activator_button, jq_script])
>         return wrapper
>
>
>
>
>
> ___________________________
> *www.TenOutOfTen.org* <https://www.TenOutOfTen.org>
> roge...@gmail.com
> (+95) 09 250018669 <+95%209%20250%20018%20669> (Myanmar)
>
>
>
> On Fri, 20 Nov 2020 at 19:09, Tom Clerckx <tcle...@gmail.com> wrote:
>
>> OK, I was able to do it with SQLFORM.grid(), using jQuery by:
>> * registering a change function on the #shelves_genre field
>> * execute an XMLHttpRequest upon a change of #shelves_genre that updates 
>> the innerHTML of #shelves_shelve_items
>>
>> It would be nice however if something similar (registering form-events 
>> onchange/onselect/...) could be achieved when e.g. creating the form, so 
>> that you can do it in python instead of having to add the javascript 
>> functions.
>>
>>
>>
>> On Friday, November 13, 2020 at 3:53:23 PM UTC+1 Tom Clerckx wrote:
>>
>>> Hi,
>>>
>>> Considering the sample code below.
>>> I have manually populated the books table with a number of books for 
>>> different genres.
>>> Now I can create an entry in the shelves table, using the SQLFORM.grid
>>> The shelve_items will be shown as a dropdown list with the books that 
>>> I've added
>>>
>>> What I would like is to update the contents of the shelve_items dropdown 
>>> list in the form, based on the selected genre in that same form.
>>>
>>> In the past I did something similar, using a SELECT() box and adding an 
>>> onchange=ajax(...) call to update a DIV elsewhere in the page.
>>>
>>> I was wondering however, if there is a better way to do this directly in 
>>> the SQLFORM.grid()
>>>
>>>
>>> ===========
>>> index.html
>>> ===========
>>> {{extend 'layout.html'}}
>>> {{=form}}
>>>
>>> ===========
>>> default.py
>>> ===========
>>>
>>> def index():
>>>     form = SQLFORM.grid(db.shelves, user_signature=False)
>>>     return dict(form=form)
>>>
>>> ======
>>> db.py
>>> ======
>>> genres = ['thriller', 'sf', 'roman', 'fantasy']
>>> db.define_table('books',
>>>       Field('name', 'string'),
>>>       Field('author', 'string'),
>>>       Field('genre', 'string', requires=IS_IN_SET(genres)),
>>>       format='%(name)s'
>>>       )
>>> db.define_table('shelves',
>>>       Field('genre', 'string', requires=IS_IN_SET(genres)),
>>>       Field('shelve_items', 'reference books'),
>>>       )
>>>
>>> -- 
>> Resources:
>> - http://web2py.com
>> - http://web2py.com/book (Documentation)
>> - http://github.com/web2py/web2py (Source code)
>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>> --- 
>> 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+un...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/web2py/61c5b124-cf09-4df5-aa58-dd6589bc63b8n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/web2py/61c5b124-cf09-4df5-aa58-dd6589bc63b8n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/web2py/256f5ca3-fc6b-4b5f-b819-a6f37aa54e82n%40googlegroups.com.

Reply via email to