0

我创建了三个作为模块添加到 YUI 的小部件。所有小部件都使用 Y.Get.js 方法使用相同的 javascript 库 (commons.js)。这些小部件在单独的 js 文件中定义(我需要这样做,以便这些小部件是独立的)。所有这些都加载到 HTML 文件中并呈现。但是,通过在浏览器中检查 HTML 文件的元素,发现 commons.js 文件在 HTML 文件中包含了 3 次,但 ID 不同:

<script charset="utf-8" id="yui_3_5_0_1_1374466627361_24" src="js/common.js"></script>
<script charset="utf-8" id="yui_3_5_0_1_1374466627361_32" src="js/common.js"></script>
<script charset="utf-8" id="yui_3_5_0_1_1374466627361_38" src="js/common.js"></script>

YUI 有没有办法避免这种重复?谢谢!

4

1 回答 1

1

Y.Get.js如果您在模块的主体中​​使用它,则在包含模块时将始终调用它。

以下是一些建议:

  • 将 的内容common.js放入 YUI 模块中。这可能是最好的选择
  • 使用 YUI 加载它并自动将其包装到一个模块中:

例子:

YUI({
  modules: {
    'my-common': {
      fullpath: 'js/common.js',
      requires: []
    }
  },
  onProgress: function (e) {
    for (var _module, i = 0, length = e.data.length; i < length; i++) {
      _module = e.data[i];
      if (_module.name === 'my-common') {
        YUI.add('my-common', function (Y) {
          Y.MyCommon = MyCommon;
        });
      }
    }
  }
}).use('my-common', function (Y) {
  // ...
});
  • YUI().use()使用以下方法从回调中加载模块Y.Get.js

例子:

YUI(/* ... */).use('some-module', function (Y) {
  Y.Get.js('js/common.js', function () {
    // rest of your stuff
  });
});
  • 在加载之前检查它是否已经加载
于 2013-07-24T14:34:07.113 回答