0

Windows フォーム アプリケーションには、modernizr のロード後に参照される Master.js ファイルがあります。

masterpage.js の下部にある $(document).ready 関数で modernizer.load テストを宣言しています。これにより、必要なテストに基づいて js ファイルを読み込むことができます。

すなわち

   $(document).ready(function () {
        Modernizr.addTest('mytest', $('section #myid').length > 0);    
        Modernizr.load({
            test: Modernizr.mytest,
            yep: ["custom1.js",
                "customjs2.js"],
            complete: {
                //do stuff
                }
            }
        });
    });

ただし、このテストは、document.ready と、この後に発生する可能性のある DOM 挿入ポイントの両方で実行したいと考えています。これは Modernizr または jQuery で可能ですか?

私の目標は、リソースをテストにロードする必要がある DOM 要素を挿入する可能性がある将来のポイントの後にテストを再宣言するのではなく、masterpage.js ですべての modernizr テストを宣言することです。

4

1 に答える 1

1

まず、Modernizr.addTest()あなたの場合は本当に必要ではありません(それはラッチし、おそらく望ましくない動作を引き起こします)。あなたは簡単に行うことができます:

Modernizr.load({
    test: $('section #myid').length > 0,
    ...
});

DOMの監視方法によっては、おそらくそれを完全にスキップすることもできます。Livequeryはこれに適しています:

$('section #myid').livequery(function () {
    // This will run whenever a new element matches the selector: either now
    // (if the element already exists), or when it's inserted into the DOM later
    Modernizr.load({
        // no test needed - just use it as an async loader
        load: ['custom1.js', 'custom2.js'],
        complete: function () {
            // do stuff
        }
    });

    // Presumably you only want the above to run once, so remove the Livequery
    // handler now (`arguments.callee` is the current function, i.e. the event
    // handler)
    $('section #myid').expire(arguments.callee);
});
于 2013-03-19T18:53:01.703 に答える