What I mean by passing argument from the view to the controller is this
(let us consider in my view):
(1) <td width="40%"><a
href="{{=URL('my_controler_def',args=id)}}">Apply</a></td>
(2) <button onclick='window.open("{{=URL("my_controler_def",args=id)}}",
"mywindow");'>Apply</button>
In the above (1) is calling that URL with an argument id. (2) is a button,
when I click on that, it goes to the controller function my_controler_def,
and in my_controler_def I will have that "id" argument passed on.
I was hoping to do the same with the model. That with a button I can pass
an argument from my view to the controller modal_content
On Friday, February 12, 2016 at 3:29:47 PM UTC-5, Val K wrote:
>
>
> OK, but what do you mean under "pass that argument from my view" ?
> view is processed and rendered to html page at server side, JS runs only
> on the client side.
> so, if you can pass arg from veiw (i.e. arg is defined on server side),
> also you can pass it in main_page():
>
> def main_page():
>
> main_pg=DIV(<any your content>)
>
> m_cont = LOAD(f='*modal_content**.load*', *args=[1],* ajax=True,
> ajax_trap=True ) # - must works, I'm sure while modal_content() runs
> "int(request.args(0))
> == 1" will be true
> ...
>
>
>
>
> <[email protected] <javascript:>> писал(а) в своём письме Fri, 12 Feb
> 2016 23:04:08 +0300:
>
> What I have done with your code is change the contoller to be:
>
>
> def main_page():
> main_pg=DIV('hello world')
> m_cont = LOAD(f='modal_content.load', ajax=True, ajax_trap=True )
> dialog = modal_wrapper(m_cont, _id='cont_id', header='Header',
> footer='footer')
> #show_modal_btn = BUTTON( 'Show modal',_type="button",_class = "btn
> btn-default",_onclick=""" $('#cont_id').modal('show') """)
> #don't forget to add dialog and show_modal_btn to main page
> #main_pg.append(show_modal_btn) # or main_pg.append(
> DIV(show_modal_btn) ) or something else
> main_pg.append(dialog)
> return dict(main_pg = main_pg)
>
>
> And in my view I have (I am making an example here):
>
> {{extend 'layout.html'}}
> {{=main_pg}}
>
> {{=BUTTON( 'Apply',_type="button",_class = "btn
> btn-default",_onclick="$('#cont_id').modal('show')")}}
>
> Works fine. Because I see the button and I click and see the pop up.
> Great. Only issue is, I need to update the table with my argument. For
> example:
>
> def modal_content():
> db.mytable.id.default = request.args(0) #Just an example.
> form = SQLFORM(db.mytable) # or even form = SQLFORM.grid(...)
> return dict(form=form)
>
>
> So, I need to pass that argument from my view to the controller of the
> form. Only thing I have at my disposal is the button.
>
>
>
> On Friday, February 12, 2016 at 2:25:36 PM UTC-5, Val K wrote:
>>
>>
>> I mean passing args/vars in main_page():
>>
>> def main_page():
>>
>> main_pg=DIV(<any your content>)
>>
>> m_cont = LOAD(f='*modal_content**.load*', *args=[ <list of your
>> args>], vars={<dict of your vars> }*, ajax=True, ajax_trap=True )
>> ...
>>
>>
>>
>> But may be you want to pass something from client side, i.e. args are
>> defined by some user action.
>> What exactly do you want to do?
>>
>>
>>
>>
>>
>> On Friday, February 12, 2016 at 10:00:22 PM UTC+3, [email protected]
>> wrote:
>>>
>>> In the book it says load in the view. Nothing in the controller. I was
>>> just wondering if we can add a button in the view and call the ajax from
>>> the view with the argument. If we need to call the LOAD from the view, its
>>>
>>> {{=LOAD('default','manage_things',ajax=True)}}
>>>
>>> Then it fails for m_count.
>>>
>>>
>>> On Friday, February 12, 2016 at 12:20:10 AM UTC-5, Val K wrote:
>>>>
>>>> LOAD() works like URL(), so, to pass args/vars to modal_content you
>>>> could write
>>>> m_cont = LOAD(f='*modal_content**.load*', *args=[ ], vars={ }*,
>>>> ajax=True, ajax_trap=True ) # see LOAD in web2py book
>>>>
>>>> in modal_content controller there is nothing new, everything is as
>>>> usual
>>>> def modal_content():
>>>> arg_0 = request.args(0)
>>>> a = request.vars.a
>>>>
>>>>
>>>>
>>>> On Friday, February 12, 2016 at 1:16:35 AM UTC+3, [email protected]
>>>> wrote:
>>>>>
>>>>> Thank you! Val and the app works great.
>>>>>
>>>>> One question:
>>>>>
>>>>> Instead of controller, I have the button displayed in the view as:
>>>>>
>>>>> {{=BUTTON( 'Apply',_type="button",_class = "btn
>>>>> btn-default",_style="background-color:green;background-image:none",_onclick="""
>>>>>
>>>>> $('#cont_id').modal('show') """ )}}
>>>>>
>>>>> It works, however, I need to pass an argument to my controller
>>>>> "modal_content". How do I pass a request.args(0) from my view to the
>>>>> controller in above? Just like I would do
>>>>>
>>>>> <button onclick='window.open("{{=URL("*modal_content*",args=
>>>>> something.id)}}", "mywindow");'>Apply</button>
>>>>>
>>>>>
>>>>> Since I don't see the URL or callback to the javascript. Thanks in
>>>>> advance.
>>>>>
>>>>>
>>>>> On Thursday, February 11, 2016 at 4:27:22 PM UTC-5, Val K wrote:
>>>>>>
>>>>>> Hi!
>>>>>> Here is my solution. I have modal_wrapper function. In controller
>>>>>> file, I have two controllers - main_page and modal_content:
>>>>>>
>>>>>>
>>>>>>
>>>>>> def *main_page*():
>>>>>>
>>>>>> main_pg=DIV(<any your content>)
>>>>>>
>>>>>> m_cont = LOAD(f='*modal_content**.load*', ajax=True,
>>>>>> ajax_trap=True )
>>>>>>
>>>>>> dialog = modal_wrapper(m_cont, _id='*cont_id*', header='Header',
>>>>>> footer='footer')
>>>>>>
>>>>>> show_modal_btn = BUTTON( 'Show modal',
>>>>>> _type="button",
>>>>>> _class = "btn
>>>>>> btn-default",
>>>>>> _onclick="""
>>>>>> $('#*cont_id*').modal('show') """)
>>>>>>
>>>>>> #don't forget to add dialog and show_modal_btn to main page
>>>>>> main_pg.append(show_modal_btn) # or main_pg.append(
>>>>>> DIV(show_modal_btn)
>>>>>> ) or something else
>>>>>> main_pg.append(dialog)
>>>>>>
>>>>>> return dict(main_pg = main_pg)
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> # keep in mind just one thing:
>>>>>> # this controller is exposed by *.load, so it must return a dict of
>>>>>> ONE element
>>>>>> # to return more than one element - wrap all in one DIV:
>>>>>> # ret = DIV()
>>>>>> # ret.append( ... )
>>>>>> # ret.append( form )
>>>>>> # ret.append( ... )
>>>>>> # return dict(ret = ret)
>>>>>>
>>>>>> def *modal_content*():
>>>>>>
>>>>>> form = SQLFORM(...) # or even form = SQLFORM.grid(...)
>>>>>>
>>>>>> return dict(form=form)
>>>>>>
>>>>>>
>>>>>>
>>>>>> # means bootstrap 3
>>>>>> def* modal_wrapper*(content, _id, header='', footer=''):
>>>>>>
>>>>>> main_wrap = DIV('', _class="modal fade", _role="dialog",
>>>>>> _id=_id, _tabindex="-1" )
>>>>>> title_id = _id + '_title'
>>>>>> main_wrap['_aria-labelledby']=title_id
>>>>>>
>>>>>> dialog_div=DIV('', _class="modal-dialog" , _role="document")
>>>>>> content_div=DIV('', _class="modal-content")
>>>>>> header_div = DIV( _class="modal-header")
>>>>>>
>>>>>> close_cross = BUTTON(
>>>>>> SPAN(XML('×'),
>>>>>> **{'_aria-hidden':"true"}),
>>>>>> _type="button", _class="close",
>>>>>> data={'dismiss':"modal"},
>>>>>> **{'_aria-label':"Close"}
>>>>>> )
>>>>>> title_h4 = H4( header, _class="modal-title", _id = title_id)
>>>>>> body_div = DIV( content, _class="modal-body")
>>>>>>
>>>>>>
>>>>>> close_btn = BUTTON('Close', _type="button", _class="btn
>>>>>> btn-default", data={'dismiss':"modal"})
>>>>>> footer_div = DIV( footer, close_btn, _class="modal-footer")
>>>>>>
>>>>>> # gluon all
>>>>>> main_wrap[0] = dialog_div
>>>>>> dialog_div[0] = content_div
>>>>>>
>>>>>> header_div.append(close_cross)
>>>>>> header_div.append(title_h4)
>>>>>>
>>>>>> [content_div.append(c) for c in (header_div, body_div,
>>>>>> footer_div)]
>>>>>> return main_wrap
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Thursday, February 11, 2016 at 8:07:32 PM UTC+3,
>>>>>> [email protected] wrote:
>>>>>>>
>>>>>>> Thank you for your answer Massimo. When I implemented this.
>>>>>>>
>>>>>>> <button onclick='window.open("{{=URL("my_view",args=something.id)}}",
>>>>>>> "mywindow");'>Apply To This Post</button>
>>>>>>>
>>>>>>> It shows me a button and then I get redirected to another page. I
>>>>>>> just wanted a pop up window open up with a form to submit that user can
>>>>>>> move around without being redirected to another page.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Wednesday, February 10, 2016 at 10:51:11 PM UTC-5, Massimo Di
>>>>>>> Pierro wrote:
>>>>>>>>
>>>>>>>> I see you want a different window, not a modal.
>>>>>>>>
>>>>>>>> then you have to put the form logic in its own controller action
>>>>>>>> and call it from js
>>>>>>>>
>>>>>>>> <button onclick="window.open("{{=URL('form_action)}}");">click
>>>>>>>> me</button>
>>>>>>>>
>>>>>>>> On Wednesday, 10 February 2016 18:00:44 UTC-6, [email protected]
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> Thank you for the answer Massimo. I did this like you said to put
>>>>>>>>> the form in the body in index/popup.html however, it didn't pop up
>>>>>>>>> like the
>>>>>>>>> example in the link above. Instead I got it in the same browser. I am
>>>>>>>>> guessing my implementation is wrong.
>>>>>>>>>
>>>>>>>>> <div class="modal fade">
>>>>>>>>> <div class="modal-dialog">
>>>>>>>>> <div class="modal-content">
>>>>>>>>> <div class="modal-header">
>>>>>>>>> <button type="button" class="close" data-dismiss="modal"
>>>>>>>>> aria-hidden="true">×</button>
>>>>>>>>> <h4 class="modal-title">Modal title</h4>
>>>>>>>>> </div>
>>>>>>>>> <div class="modal-body">
>>>>>>>>>
>>>>>>>>> {{=form}}
>>>>>>>>>
>>>>>>>>> </div>
>>>>>>>>> <div class="modal-footer">
>>>>>>>>> <button type="button" class="btn btn-default"
>>>>>>>>> data-dismiss="modal">Close</button>
>>>>>>>>> <button type="button" class="btn btn-primary">Save
>>>>>>>>> changes</button>
>>>>>>>>> </div>
>>>>>>>>> </div><!-- /.modal-content -->
>>>>>>>>> </div><!-- /.modal-dialog -->
>>>>>>>>> </div><!-- /.modal -->
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Wednesday, February 10, 2016 at 5:06:28 PM UTC-5, Massimo Di
>>>>>>>>> Pierro wrote:
>>>>>>>>>>
>>>>>>>>>> Bootstrap3 has built-int modals:
>>>>>>>>>> https://nakupanda.github.io/bootstrap3-dialog/
>>>>>>>>>> You can but {{=form}} in the body of the modal.
>>>>>>>>>>
>>>>>>>>>> On Tuesday, 9 February 2016 14:26:05 UTC-6, [email protected]
>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>> Hello, A new user migrating from Django to web2py and absolutely
>>>>>>>>>>> loving it. A quick question. How do I use a light box or a pop up
>>>>>>>>>>> window to
>>>>>>>>>>> display a form in my view?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> for example in default/index.html
>>>>>>>>>>>
>>>>>>>>>>> {{=form}}
>>>>>>>>>>>
>>>>>>>>>>> Want to show that form in a pop up window.
>>>>>>>>>>>
>>>>>>>>>> --
> 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 a topic in the
> Google Groups "web2py-users" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/web2py/Y_TXPdRpDqQ/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected] <javascript:>.
> For more options, visit https://groups.google.com/d/optout.
>
>
>
>
> --
> Написано с помощью почтового клиента Opera: http://www.opera.com/mail/
>
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.