How can I trigger JS code from a delete operation? Anything in the view or 
controller would not know (and would not be notified) that SQLFORM.grid had 
just performed a delete.

BTW, client_side_delete is not recognized and generates a ticket.


On Saturday, 25 January 2014 13:05:40 UTC-5, Anthony wrote:
>
> Oh yes, good point -- the delete operation happens via Ajax, so the grid 
> full page is not reloaded. You can try SQLFORM.grid(..., 
> client_side_delete=True), though not sure that will work if the grid isn't 
> inside a component. Another option is to set response.js to some JS code to 
> update the sum after a delete.
>
> Anthony
>
> On Saturday, January 25, 2014 12:02:29 PM UTC-5, horridohobbyist wrote:
>>
>> Thanks for the tip about database sum. I've also moved most of the logic 
>> into the controller.
>>
>> However, your suggestion that the database sum should occur *after* the 
>> SQLFORM.grid is incorrect. I tried it.
>>
>> The problem seems to be that the page is not refreshed after a *delete*, 
>> whereas the page *is* refreshed after an *update*. I surmise the reason 
>> is because when you do an update, you're brought to another page with the 
>> update form, and consequently, once you're finished with the form 
>> submission, the previous page is refreshed.
>>
>> But when you do a delete, you stay on the current page. You get a pop-up 
>> asking for delete confirmation, but otherwise there is no reason for the 
>> page to refresh. This may also explain why the label "xx records found" 
>> from SQLFORM.grid does not change; "xx" is unchanged after a delete.
>>
>> I believe this delete behaviour is wrong. So the question is:  How do you 
>> force a page refresh after a delete?
>>
>> Thanks.
>>
>> On Saturday, 25 January 2014 08:50:10 UTC-5, Anthony wrote:
>>>
>>> The line in question comes *before* SQLFORM.grid is called (which is 
>>> where the delete happens), so the delete hasn't yet happened at that point.
>>>
>>> A couple other points:
>>>
>>>    - You should really keep your code in the controller and limit your 
>>>    view file to display logic.
>>>    - You can have the database calculate the sum of a numeric field for 
>>>    you rather than iterating over records in Python. See 
>>>    
>>> http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#sum,-avg,-min,-max-and-len
>>>    .
>>>
>>> Anthony
>>>
>>> On Saturday, January 25, 2014 7:17:44 AM UTC-5, horridohobbyist wrote:
>>>>
>>>> Okay, I know the problem now. After a delete is performed, the line 
>>>> indicated by the comment below still thinks that the record is there, even 
>>>> though the record is verifiably absent when I check in Database 
>>>> Administration! It almost looks like a caching problem. I tried a 
>>>> db.commit() before the comment line, but it made no difference.
>>>>
>>>> {{
>>>> import locale
>>>> locale.setlocale(locale.LC_ALL,'en_CA.utf8')
>>>>
>>>> total = 0
>>>> # the following line does not recognize the deletion
>>>> rows = db(db.cart.buyer_id==auth.user_id).select()
>>>> for row in rows:
>>>> total += row.subtotal
>>>> pass
>>>> }}
>>>>
>>>> {{=SQLFORM.grid((db.cart.buyer_id==auth.user_id),
>>>> maxtextlength=1000,
>>>> paginate=10,
>>>> searchable=False,
>>>> details=False,
>>>> editable=True,
>>>> deletable=True,
>>>> create=False,
>>>> csv=False)
>>>> }}
>>>>
>>>> <div style="text-align:right;font-size:large">Total: 
>>>> {{='C'+locale.currency(total,grouping=True)}}</div>
>>>>
>>>>
>>>>
>>>>
>>>> On Saturday, 25 January 2014 05:59:06 UTC-5, horridohobbyist wrote:
>>>>>
>>>>> Never  mind my last message. I'm still not sure it's being called. I 
>>>>> need to investigate further.
>>>>>
>>>>> On Saturday, 25 January 2014 05:47:35 UTC-5, horridohobbyist wrote:
>>>>>>
>>>>>> Oh, it's called BEFORE the delete! That's why I was getting 
>>>>>> unexpected results.
>>>>>>
>>>>>> I need to perform an action AFTER the delete. Is there a workaround?
>>>>>>
>>>>>> Thanks.
>>>>>>
>>>>>> On Saturday, 25 January 2014 01:00:25 UTC-5, Anthony wrote:
>>>>>>>
>>>>>>> Does the record actually get deleted from the database? If so, 
>>>>>>> ondelete should be getting called right before the delete. You may need 
>>>>>>> to 
>>>>>>> show some code and explain what you're seeing and what you expect. 
>>>>>>> Also, 
>>>>>>> note that the ondelete code in .grid has changed in more recent 
>>>>>>> versions, 
>>>>>>> but should have worked in 2.4.2.
>>>>>>>
>>>>>>> Anthony
>>>>>>>
>>>>>>> On Friday, January 24, 2014 8:22:17 PM UTC-5, horridohobbyist wrote:
>>>>>>>>
>>>>>>>> I'm using Version 2.4.2.
>>>>>>>>
>>>>>>>> I'm finding that the ondelete function is never called when I 
>>>>>>>> delete a record in SQLFORM.grid. Is this a bug, or am I doing 
>>>>>>>> something 
>>>>>>>> wrong? The onupdate function does get called when I update a record.
>>>>>>>>
>>>>>>>> Thanks.
>>>>>>>>
>>>>>>>

-- 
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/groups/opt_out.

Reply via email to