2014-12-06 14 views
6

W poprzednim pytaniu mówiłem o wtyczce bootstrap select, w której metoda destroy wykonuje coś, czego nie chcę. Edytuję ręcznie wtyczkę, ale nie jest to dobra praktyka.Przedłużenie wtyczki bootstrap select

Bootstrap select destroy removes the original select from DOM

Chciałbym przedłużyć wtyczkę z niestandardową metodę tak, że można go zrobić dokładnie wat chcę.

przedłużyć wtyczki metodą folloing:

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

ten znajduje się w innym pliku js pod wybierz plik skryptu bootstrap.

Jak mogę nazwać tę nową metodę? Próbowałem następujących bez powodzenia:

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

lub

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

Am I czegoś brakuje?

Oryginalna metoda funkcji zniszczenia w bootstrap wybierz plugin:

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

Czy 'selectpicker()' 'this' powrót? Jeśli nie, nie możesz połączyć metody. –

+0

Widzę w wtyczce 'return this;' so yes – Mivaweb

+0

try selectpicker.prototype.customRemove(); – Dave

Odpowiedz

1

Mogłabyś proxy funkcja z własnej funkcji przy użyciu zamknięcie wstawionej, jak:

(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 
    } 
    }); 
}()); 

Uwaga: ten nadpisze prototyp wszystkich wyborów Bootstrap i zmodyfikuje jego zachowanie.

1

myślę, że masz prawidłową odpowiedź w drugiej zapytanie:
https://stackoverflow.com/a/31852632/4928642

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

następnie

$smth.selectpicker("customRemove"); 
Powiązane problemy