6

以前の質問で、destroy メソッドが望ましくないことを行っているブートストラップ選択プラグインについて話していました。プラグインを手動で編集しますが、これは良い習慣ではありません。

Bootstrap select destroy は元の選択を DOM から削除します

カスタムメソッドでプラグインを拡張して、私が望むことを正確に実行できるようにしたいと思います。

次の方法でプラグインを拡張します。

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

これは、ブートストラップ選択スクリプト ファイルの下の別の js ファイルにあります。

この新しいメソッドを呼び出すにはどうすればよいですか? 私は成功せずに次のことを試しました:

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

また

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

何か不足していますか?

ブートストラップ選択プラグインの destroy 関数の元のメソッド:

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

2 に答える 2

2

他の質問には正しい答えがあると思います:
https://stackoverflow.com/a/31852632/4928642

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

それから

$smth.selectpicker("customRemove");
于 2015-09-10T16:32:03.233 に答える
1

次のように、mixin クロージャーを使用して独自の関数で関数をプロキシできます。

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

注: これにより、すべての Bootstrap 選択のプロトタイプが上書きされ、その動作が変更されます。

于 2015-03-19T11:10:35.810 に答える