I think I can make this work. Thanks for your help Anthony and Leonel.

Jim

On Thursday, November 13, 2014 9:33:04 AM UTC-5, Anthony wrote:
>
> 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