2016-03-30 9 views
1

Ich habe eine große Auswahl mit etwa ~ 1500 Artikel darin. Immer, wenn ich nenne diesen CodeSemantic UI Drop-down-Lags insgesamt UI bei der Einstellung von Werten

$('#multi-select').dropdown('set exactly', ['my value']); 

seinen Wert zu setzen, die gesamte UI blockiert und hinkt. Jetzt weiß ich, dass dies auf das große Dropdown (1500 Elemente) zurückzuführen ist, aber ich würde gerne wissen, ob es einen Weg gibt, so viele Dinge zu behalten, ohne das Benutzererlebnis auf der Toilette zu ersticken.

Ich habe ein Beispiel unten zusammengestellt. Sie können versuchen, den Button einmal oder mehrmals hintereinander zu drücken, um zu sehen, dass der Browser erstickt.

http://jsfiddle.net/qhy9do4w/1/

Antwort

0

hatte ich einen Blick in die semantic.js Code für das Set Drop-Down-genau und es ist ganz etwas: https://github.com/Semantic-Org/Semantic-UI/blob/74fea12e1fd548cb870872ba5ed59f5acdcc57ba/dist/components/dropdown.js#L2219:L2295

Sie könnten Figur versuchen, wenn der Code langsam ist oder ob Somewere Sie tun können irgendeine Art von Verknüpfung.

Aber das ist hart und Sie möchten vielleicht über eine Alernative wie eine search denken.

+0

Ich muss mehrere Werte auswählen können. Ich bin mir nicht sicher, ob Sie die Suche mit mehreren Werten verwenden können oder nicht – ErwanLent

+0

Natürlich können Sie einfach den 'onSelect' Callback verwenden, um Werte zu einer Liste hinzuzufügen, vielleicht als Checkboxen, was immer Ihnen passt. –

+0

nein ich meinte das semantische ui multiple values ​​feature, wie im Beispiel. Klicken Sie auf das Dropdown und klicken Sie auf mehrere Werte. – ErwanLent

1

Ich habe in den Code geschaut und den Klick profiliert. Irgendwo in seinen Eingeweiden feuert Semantic eine Menge Ereignisse ab und den größten Teil der Verzögerungszeit nimmt module.trigger etwas mit. Innerhalb des Code wie folgt aussieht:

trigger: { 
    change: function() { 
    var 
     events  = document.createEvent('HTMLEvents'), 
     inputElement = $input[0] 
    ; 
    if(inputElement) { 
     module.verbose('Triggering native change event'); 
     events.initEvent('change', true, false); 
     inputElement.dispatchEvent(events); 
    } 
    } 
} 

Ich sehe keine Möglichkeit, den Event-Handling Teil zu deaktivieren.