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>

我在两个不同的应用程序中使用相同的代码。

  • 在一个应用程序中,一切正常,因为首先加载了 Wrapper。
  • 在其他应用程序中,它抛出“MyHistory is not defined”,因为在加载包装器之前调用了“jQ(document).ready”函数。

我不知道是什么导致了这种行为。谁能帮我?

4

1 回答 1

2

YUI.use() 中的回调函数“function(Y){... where you defined 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 回答