requirejsでいくつかのjqueryuiプラグインをロードするAPIを定義したいとします。ロードするプラグインの 定義は、データノードを介してDOM含量で行われる。jqueryプラグインの継承とrequirejs
<div id="pluginContainer">
<div data-plugin="fooPlugin"/>
<span data-plugin="barPlugin"/>
</div>
次のコードソースは、コンテナ内のすべてのプラグインをロードしよう:
<script type="text/javascript">
require(['jquery', 'container'], function() {
// when widget container is loaded, we load the plugins inside #pluginContainer
$('#pluginContainer').container();
});
</script>
プラグインコンテナコード源であります(ファイル/js/container.js中)、次の1:コードソース:
define(['jquery', 'jquery/ui'], function($) {
'use strict';
$.widget('ns.container', {
/**
* container constructor
* @private
*/
_create: function() {
this._initPlugin();
},
/**
* load plugins into the container
* @private
*/
_initPlugin: function() {
var $plugin, $pluginType;
this.element.find('*[data-plugin]').each(function(index, plugin) {
$plugin = $(plugin);
pluginType = $plugin.data('plugin');
require([pluginType], function() {
try {
console.log("instanciate plugin type '" + pluginType+"'");
$plugin[pluginType]();
} catch (e) {
console.error("Cannot instanciate plugin '"+pluginType+"'");
}
});
}
});
});
私の問題は、いくつかのプラグインがうまくロードされていないようだということです上記の次のコンソール出力を表示:
create fooPlugin
Instanciate plugin type 'fooPlugin'
Cannot instanciate plugin 'barPlugin'
create extendedPlugin
create barPlugin
と私は期待して:
create fooPlugin
Instanciate plugin type 'fooPlugin'
create extendedPlugin
create barPlugin
Instanciate plugin type 'barPlugin'
私は、これはその責任があるプラグインの組織であると仮定します。彼らは、次のいずれかを使用します。
AbstractPlugin
|_FooPlugin
|_ExtendedPlugin
|_BarPlugin
すべての私のプラグインがabstractPlugin(/js/shared/abstract.jsファイルで定義されている)からの基本構造を持っている:定義された
/**
* abstractPlugin widget plugin definition
* This plugin define base structure for all plugins used
*/
define(['jquery', 'jquery/ui'], function($) {
'use strict';
$.widget('ns.abstractPlugin', {
_create: function() {}
});
});
フー・プラグイン( /js/foo/foo.jsファイル内)abstractPluginから直接継承:
/**
* fooPlugin widget plugin definition
*/
define(['jquery', 'jquery/ui', 'abstractPlugin'], function($) {
'use strict';
$.widget('ns.fooPlugin', {
_create: function() {
console.log('create fooPlugin');
}
});
});
しかし/js/bar/bar.jsファイルで定義されてBarPlugin()は、中間プラグインから継承し、(定義されたextendedPluginと呼ばれます/ jでS /共有/ extended.jsファイル):
/**
* extendedPlugin widget plugin definition
*/
define(['jquery', 'jquery/ui', 'abstractPlugin'], function($) {
'use strict';
$.widget('ns.extendedPlugin', $.ns.abstractPlugin, {
_create: function() {
console.log('create extendedPlugin');
}
});
});
バーのプラグインコンテンツは、次のいずれかになります。このウェブサイトから入手できるいくつかの答えをよる
/**
* Bar widget plugin definition
*/
define(['jquery', 'jquery/ui', 'extendedPlugin'], function($) {
'use strict';
$.widget('ns.barPlugin', $.ns.extendedPlugin, {
_create: function() {
console.log('create barPlugin');
}
});
});
、定義、すぐに使用されて使用されている必要後で使用するために使用されます。だから私のコードは大丈夫です。
私の質問は:どのように私はプラグインの依存関係もすべて読み込まれることを確認することができますか?この例で使用
requirejsの構成は、次のいずれかです。
var config = {
map: {
'*': {
abstractPlugin: 'js/shared/abstract',
fooPlugin: 'js/foo/foo',
extendedPlugin: 'js/shared/extended',
barPlugin: 'js/bar/bar',
container: "js/container"
}
}
}
あなたは私を提供することができ、先端のあらゆる種類のために事前にありがとうございます。
よろしく
こんにちはエドワード、あなたの答えをありがとう。 – kmm
こんにちはエドワード、あなたの答えをありがとう。私はこのプロジェクト内のrequirejsのコンセプトを発見しています。barPluginにextendedPluginの依存性について言及する必要があることは驚きです。 requirejsで処理するのは適切な方法ですか?しかし、残念ながら、これは私の問題を解決しません。 – kmm