2011-12-18 15 views
2

私はjQuery Lazy pluginを使用して、JSおよびCSSリソースを遅延読み込みしています。テーブルをソート可能にするためにTableSorter jQuery pluginも使用しています。現在、これらの私は単に怠惰なプラグインでTablesorterを定義してから、このようTablesorter使用も問題ありません、と偉大な2つの作品:jQuery lazy loadプラグインとtablesorterプラグインをaddParserメソッドで使用していますか?

$('#table_id').tablesorter(); 

予想通りこれ以上の作品は、Tablesorterライブラリは、オンデマンドでロードされ、HTMLテーブルがソート可能になります。しかし、私はこのようなtablesorterするカスタムパーサーを追加する必要があります。上記のaddParserコードで

$.tablesorter.addParser({ 
    id: 'my_parser', 
    is: function(s) { 
    return false; 
    }, 
    format: function(s) { 
    var result = s.match(/([0-9]+)/); 
    if (result == null) return 0; 
    return parseInt(result[0]); 
    }, 
    type: 'numeric' 
}); 

問題は、私は「$の.tablesorterは何のメソッド 『addParser』を持っていない」というエラーが出るということ、です。また、TableSorterプラグインが既にロードされているかどうかには違いはありません。レイジープラグインは$ .tablesorterを独自の関数で上書きし、この呼び出しの呼び出しを許可しません。

この例のbehaviour can be seen here in this jsFiddleです。

誰でも手伝ってもらえますか?私は何か助けや考えを非常に感謝します。前もって感謝します。

+0

、私がすることができますロードが完了した後にイベントがトリガーされるというヒントが見つかりません。しかし、これはまさにあなたがここで必要とするものです。なぜなら、実際に何かがライブラリをロードするまで、コンフィギュレーション呼び出しを延期したいからです。 – Tomalak

+1

[Yepnope](http://yepnopejs.com/)や[RequireJS](http://requirejs.org/)のような別のローダープラグインの使用を検討する必要があります。スクリプトの読み込みが完了すると、両方ともコールバック関数を提供します。 –

+0

@DidierG。これらのライブラリは両方とも、 'jquery.lazy.js' – Tomalak

答えて

2

:怠惰なプラグインのソースコードを見てみると

$(function() { 
yepnope({ 
    test : $("table.sortable").length, 
    yep  : "/resources/jquery.tablesorter.js", 
    complete: function() { 
     $.tablesorter.addParser({ 
     // whatever; 
     }); 
     $("table.sortable").tablesorter(); 
    } 
    }); 
}); 
+0

私はあなたに同意します、これは動作しますが、私のシナリオでは非常に実用的ではありません。私はいくつかのソート可能なテーブルを初期化したいすべての場所でこの長いコードを使用する必要があります。レイジープラグインについて私が気に入っているのは、私のリソースリストが1つのファイルに集約されているため、自分のページのリソースの一部を使用する必要があるたびに、そのリソースを処理する必要はありません。だからあなたは正しい、あなたのソリューションは動作しますが、それは私にはあまり役に立たないでしょう。しかし、あなたの努力に感謝します。 – Frodik

+0

このアプローチでは、どのように* 1つの場所/ファイルにすべてのリソースを持てないのか分かりません。しかし、はい、あなたのソースコードの一部を変更する必要があるかもしれません。要点は: 'jquery.lazy.js'のソースコードの中で何かが見落とされていない限り(これは完全に可能です)、あなたが望むことはできません。 – Tomalak

+0

私はあなたが実証したようにyepnopeを使うことができない理由を明らかにするために、私はテーブルを持つページがたくさんあり、各テーブルは独自のページでいくつかのtablesorter固有のオプションで初期化されています。これらのオプションは動的に生成されるため、このページのインラインで指定する必要があります.Yepnopeを使用すると、これらのオプションをすべて1つのJSファイルに入れることはできません。なぜなら、すべてのテーブルIDを知っていなければならず、すべてのテーブルIDが1つのJSファイルに配置されていれば、特定のtablesorterオプションを提供できないからです。 – Frodik

1

このエラーが発生するのは正常です。 Lazyプラグインが動作する方法は、オプションで提供するnameのプロキシを作成することです。

だから、実際に$.tablesorter(コンソールで見て)されています。プラグインはすでに$.lazy.archiveにロードされた

$.tablesorter: 
function proxy() { 
    var self = this; 
     arg = arguments; 

     if($.lazy.archive[src].status === 'loaded') { 

      $.each(this,function(){ 
       $(this)[name].apply(self,arg); 
      }); 

     } else if ($.lazy.archive[src].status === 'loading') { 
      $.lazy.archive[src].que.push({'name':name,'self':self,'arguments':arg}); 

     ... 

場合、それはあなたがtablesorter()と呼ばれる要素に適用し、それ以外の場合は、最初のプラグインをロードし、次にそれを示します。

プラグインが通常提供する元のネームスペースがないため、コンテキスト内で$.tablesorter.addParserを使用することはできません。ただ、(周りのすべてのソート可能なテーブルがある場合tablesorterプラグインのすなわち条件付きロード)yepnope.jsは簡単にあなたが必要なものを行うことができることを私のポイントを証明する

+0

何か方法はありますか、どうすれば$ .tablesorter.addParser()を呼び出すことができますか? – Frodik

+0

Lazyプラグインではない –

+0

Ok、またはjQuery.lazy.jsのように動作するjQuery用の遅延ロードプラグインですか?しかし、いいえ、私はそれを使用することはできませんなぜ、yepnopeについてのTomalakとの私の議論に関して... – Frodik

関連する問題