A simpler option might be to check whether the request is being made via 
Ajax, and conditionally change the view:

def inner(): 
    response.view = 'default/inner.load' if request.ajax else 
'default/inner.html'
    grid = SQLFORM.grid(db.item) 
    return locals() 

In that case, the .html view should extend the layout. Alternatively, you 
could have a single view with a conditional extends:

{{extend 'layout.html' if not request.ajax else None}}

Note that the view cannot be compiled in that case.

Anthony

On Thursday, November 13, 2014 7:37:49 AM UTC-5, Leonel Câmara wrote:
>
> The problem is that URL, when an extension is not specified, inherits it 
> from the current URL which is .load in the case where they are loaded in 
> components with extension='load'.
>
> The thing is, this need to be load, otherwise inner will use the generic 
> HTML view extending layout.html and you don't want to have a layout inside 
> your layout when you're not opening in a new window.
>
> So basically inner needs to detect whether it's really a component or not, 
> generally that's what the extension is for. The only way I can remember to 
> do this would be with stupid javascript hacks. For instance, you could make 
> an inner.load view like this:
>
> {{=grid}}
>
>
> <script>
> $('.web2py_grid a').each(function() {
>     if (typeof $(this).attr('href') !== 'undefined') {
>         $(this).attr('href', $(this).attr('href').replace('.load', '.html'
> ));
>         $(this).click(function(e) {
>             if (e.which == 1) { // If we're left clicking
>                 if(e.ctrlKey) { // ctrl key being pressed also means new 
> tab
>                     window.open($(this).attr('href'));
>                     return false;
>                 } else {  // We really want to stay in the component
>                     $(this).attr('href', $(this).attr('href').replace(
> '.html', '.load'));
>                 }
>             }
>         });
>     }
> });
> </script>
>
>
> What this does is make all links have a .html extension, then if the user 
> is left clicking it makes it .load again. Yep, it's ugly, but you asked for 
> it.
>
> [edit] Added a return false that was needed.
>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to