0

アプリケーションで jQuery と YUI-3.6.0 を使用しています。YUI 履歴モジュールを使用しています。以下のように、YUI 履歴のラッパーを作成しようとしました。(これは「history-wrapper.js」に保存されます)

var MyHistory;

(function() {
    YUI().use('history', function (Y) {
        var history = null;

        MyHistory = function() {
            history = new Y.History();
        };

        MyHistory.prototype.save= function() {
            history.add({
                data : "some data"
            });
        };

        MyHistory.prototype.load= function() {
            var data = (history.get("data");
            //process data
        };
    });
})();

次のコード行でこのラッパーを使用しています

<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="yui/yui/yui-min.js"></script>
<script type="text/javascript" src="js/history-wrapper.js"></script>
<script type="text/javascript">
    var jQ = jQuery.noConflict();

    jQ(document).ready(function() {
        var history = new MyHistory();
        history.save();
    });
</script>

2 つの異なるアプリケーションで同じコードを使用しています。

  • 1 つのアプリケーションでは、Wrapper が最初にロードされるため、すべてが正常に機能します。
  • 他のアプリケーションでは、ラッパーがロードされる前に「jQ(document).ready」関数が呼び出されるため、「MyHistory is not defined」がスローされます。

この動作の原因がわかりません。誰でも私を助けることができますか?

4

1 に答える 1

2

YUI.use()のコールバック関数 "function(Y){... where you define MyHistory ...}"は、依存関係(履歴)がロードされた場合にのみ実行されます。

その場合、ラッパーを使用しようとしたときにMyHistoryが定義されているという保証はありません。

解決策は、JQueryコードをYUI.use()にも配置することです。YUIローダーにjqueryと履歴モジュールをロードさせることができます。Histroyプラグインをラップする必要はありません。

正確にはわかりません(今は確認できません)。

<script type="text/javascript" src="yui/yui/yui-min.js"></script>
YUI({
    modules: {
        'jquery': {
            path: 'js/jquery.js'
        }
    }
}).use('history', 'jquery' , function (Y) {
 var jQ = Y.jQuery.noConflict(); //or juste jQuery.noConflict();

    jQ(document).ready(function() {  //it is likely the document will already be ready
        var history = new Y.History();
        history.save();

    });    
});
于 2012-08-24T11:57:47.893 に答える