2014-12-06 19 views
6

In meiner vorherigen Frage sprach ich über das Bootstrap-Select-Plugin, wo die Destroy-Methode etwas tut, was ich nicht will. Ich bearbeite das Plugin manuell, aber das ist keine gute Übung.Bootstrap erweitern Plugin auswählen

Bootstrap select destroy removes the original select from DOM

würde Ich mag das Plugin mit einer benutzerdefinierten Methode zu erweitern, so dass es genau wat tun kann, was ich will.

erweitere ich das Plugin mit folloing Methode:

$.extend(true, $.fn.selectpicker.prototype, { 
    customRemove: function() { 
     this.$newElement.remove(); 
     this.$element.show(); 
    } 
}); 

Dies wird in einer anderen js-Datei unter der Bootstrap-select-Skript-Datei.

Wie kann ich diese neue Methode aufrufen? Ich habe versucht, die folgenden ohne Erfolg:

$('select#begin' + _week + _day).selectpicker("customRemove"); 

oder

$('select#begin' + _week + _day).selectpicker().customRemove(); 

bin ich etwas fehlt?

Die ursprüngliche Methode der Zerstörung Funktion im Bootstrap-select-Plugin:

remove: function() { 
    this.$newElement.remove(); 
    this.$element.show(); 
} 
+0

Does 'selectpicker()' 'return this'? Wenn nicht, können Sie die Methode nicht verketten. –

+0

Ich sehe im Plugin 'return this;' also ja – Mivaweb

+0

versuchen selectpicker.prototype.customRemove(); – Dave

Antwort

1

Sie könnten Proxy die Funktion mit Ihrer eigenen Funktion einen mixin Verschluss verwendet wird, wie:

(function() 
{ 
    // grab a reference to the existing remove function 
    var _remove = $.fn.selectpicker.prototype.remove; 

    // anything declared in here is private to this closure 
    // so you could declare helper functions or variables 
    // ... 

    // extend the prototype with your mixin 
    $.extend(true, $.fn.selectpicker.prototype, 
    { 
    // this will replace the original $.fn.selectpicker.prototype.remove function 
    remove: function() 
    { 
     // call whatever code you want here 
     // ... 
     // ... like grabbing the DOM element 
     // ... 
     // then call the original remove function 
     _remove.apply(this, arguments); 

     // then call whatever you want here, like re-adding the DOM element 
    } 
    }); 
}()); 

Hinweis: Diese Überspringt den Prototyp für alle Bootstrap wählt und ändert sein Verhalten.

1

Ich glaube, Sie haben die richtige Antwort in anderen Frage:
https://stackoverflow.com/a/31852632/4928642

jQuery.fn.selectpicker.Constructor.prototype.customRemove = function() { 
    this.$newElement.remove(); 
    this.$element.show(); 
}; 

dann

$smth.selectpicker("customRemove"); 
Verwandte Themen