2013-07-22 52 views
0

我創建了三個以模塊的形式添加到YUI的小部件。所有小部件使用Y.Get.js方法使用相同的JavaScript庫(commons.js)。這些小部件在單獨的js文件中定義(我需要這樣做,以便這些小部件是獨立的)。所有這些都被加載到HTML文件並呈現。但是,通過檢查瀏覽器的HTML文件中的元素,事實證明,該commons.js文件包括在HTML文件中三次,但具有不同ID:避免在YUI3中重複使用JavaScript

<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的方式避免這種重複?謝謝!

回答

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 
    }); 
}); 
  • 檢查是否加載它
+0

謝謝您的回答之前,本已裝!我最終通過將每個小部件放在一個iframe中解決了這個問題,使它們彼此獨立並與父文檔相互獨立。 –