#13614: Back button breaks many to many widget
-------------------------------+------------------------------------
     Reporter:  minarets       |                    Owner:  julien
         Type:  Bug            |                   Status:  new
    Component:  contrib.admin  |                  Version:  1.3
     Severity:  Normal         |               Resolution:
     Keywords:                 |             Triage Stage:  Accepted
    Has patch:  1              |      Needs documentation:  0
  Needs tests:  0              |  Patch needs improvement:  1
Easy pickings:  0              |                    UI/UX:  1
-------------------------------+------------------------------------

Comment (by KyleMac):

 I got fed up with how slow and crash happy `SelectBox` was with large
 (1000-11000) lists and rewrote a large chunk and submitted a pull request
 at Github in reference to #3202. I wish I had seen this ticket and knew
 that you guys were willing to accept a total jQuery based rewrite because
 I would have done that.

 The code on this page performs no faster than the original. There is no
 need for a refresh_state on every action and ''all'' manipulation should
 be done outside of the DOM. Stuff like `.find('option:selected')` is also
 very slow.

 When I saw this ticket I realised that my code has an even worse version
 of this bug (it's still there in Chrome 20). Mine would actually select
 the top N options to fill the right column which I think is worse than no
 options at all. One of the Chromium tickets says that the problem is that
 Webkit remembers selections by selectedIndex rather than the value
 attribute which lead me to the solution.

 After pressing the back button if you inspect the DOM you will notice that
 while `option.selected` is wrong the selected attribute is still actually
 in the HTML and correct. So what I did was call a fake `replaceState` so
 that a `popstate` is fired on page back and then just redisplay the
 selections based on the selected attribute from `getAttribute`. Now
 there's no need to waste twice the resources on a copy of the list.

 https://github.com/django/django/pull/222

-- 
Ticket URL: <https://code.djangoproject.com/ticket/13614#comment:31>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to