モジュール式の AJAX/PHP フレームワークの PHP 側を作成しましたが、現在はクライアント側を実装しようとしています。
モジュラー Web アプリケーションに関する以前の経験から、1 つの特定のモジュールの複数のインスタンスが必要になる場合があることを知っています。たとえば、各ユーザーのページ パーツを使用する Web ベースの 2 プレーヤー ゲームです。
PHP 側では、モジュールの構築された各インスタンスに一意の ID を割り当てました。この UID をブラウザーに渡すことができますが、このモジュール インスタンスの Javascript 側を実装する方法がわかりません。
モジュールは、一度にすべてロードすることも、AJAX を介して個別にロードすることもできます (私は jQuery を使用しています)。
現在、私はいくつかの記事で見つけたモジュラー アプローチを使用していますが、モジュール性とプライベート/パブリック コードの分離を犠牲にすることなくこの問題を解決するのに役立つ場合は、他の方法で再設計できます。今のところ、次の js ファイルがあるとします。
//Self-Executing Anonymous Func
(function( MyModule, $, undefined ) {
// My Uid
MyModule.UID = "";
//Public Method
MyModule.onLoad = function() {
alert("Hey, you loaded an instance of MyModule with UID " + MyModule.UID);
};
//Private Methods follow
function somethingPrivate( ) {
}
}( window.MyModule = window.MyModule|| {}, jQuery ));
テンプレートには Smarty を使用しています。たとえば、次のような単純なモジュール テンプレートがあるとします。
<div id="{$contents.moduleuid}">
here goes the contents of the module which can be accessed from MyModule Javascript code by using this unique moduleuid
</div>
各モジュールが Javascript を使用して追加のテンプレートを自動的に追加するように、サーバー側をセットアップしました。
<script type="text/javascript">
/*
TODO: here I have access to the {$contents.moduleuid}
But I have no idea what to put here to create a unique instance of MyModule
(also it might need loading js file if it was not loaded yet) and I should also set for
this instance MyModule.UID to {$contents.moduleuid}
and also call MyModule.onLoad for this instance after it has loaded its Javascript.
*/
</script>
私は高度な Javascript トピックの経験がないので、サーバー側で構築されるモジュールごとに MyModule の個別のインスタンスを作成する方法がわかりません。自己実行匿名関数のインスタンスを作成することはまったく可能ですか? そうでない場合、プライベート/パブリック コードを分離して Javascript オブジェクトを実装および複製するにはどうすればよいですか?