3

次のスクリプトがあります。

<script ... jquery-1.9.1.js"></script>
<script ... dataTables.js"></script>    
<script ... columnFilter.js"></script>

次のコードが columnFilter.js に存在します。

(function ($) {

   $.fn.columnFilter = function (options) {
       //some code...

       function _fnCreateCheckbox(oTable, aData) {
           //some code...
       }

   };

})(jQuery);

私がやりたいことはfunction _fnCreateCheckbox(oTable, aData)、自分のコードでオーバーライドすることです。私はJavaScriptにかなり慣れていないので、例をいただければ幸いです。

上記のコードを取得して独自のタグに追加しようとしました<script>が、うまくいきませんでした。columnFilter.js の動作を完全に停止しました (これは予想どおりです)。他に何を試すべきか本当にわかりません。

4

3 に答える 3

8
function _fnCreateCheckbox(oTable, aData) {

(function ($) {関数スコープを作成すると、作成されたスコープ内にのみ存在します。そこで編集する必要があります。関数の外でオーバーライドすることはできません。

編集:関連するメモについて

あなたが JS に巧妙で、その関数に別のことをさせようとしている場合は、columnFilter プラグイン/関数呼び出しにいくつかの追加変数を渡し、その関数でそれらを処理して別のことを行うことができます。列フィルターが何であるかはわかりませんが、次のように要素で呼び出すふりをしましょう。

el.columnFilter({optionA: true, optionB: false});

あなたができるいくつかのデータに基づいて何か他のことをしたい場合は、

el.columnFilter({optionA: true, optionB: false, extraOption: true});

次に、スクリプト全体の動作に応じて、スクリプト内で次のようにします。

$.fn.columnFilter = function (options) {
   //some code...
   if(options.extraOption){
       function _fnCreateCheckbox(oTable, aData) {
           //some default code...
       }
   } else {
       function _fnCreateCheckbox(oTable, aData) {
           //my other code...
       }
   }
};

これは大まかな例ですが、オプションを表示するだけです。

于 2013-03-08T17:12:20.390 に答える
2

columnFilter.js外部ソースからファイルをインポートするとします。

1 つのオプションは、columnFilter.jsファイルをプロジェクトのディレクトリにコピーし、必要に応じて変更してから、プロジェクトのディレクトリからインポートすることです。

于 2013-03-08T17:13:04.290 に答える
1

プロトタイプを再割り当てすることで、関数をオーバーライドできます。ただし、一般的には反対することをお勧めします。

var d = new Date();

alert(d.getFullYear()); // 2013

Date.prototype.getFullYear = function() { return "Full Year"; }

alert(d.getFullYear()); // "Full Year"

http://jsfiddle.net/js5YS/

于 2013-03-08T17:15:11.920 に答える