我已经创建了模块化 AJAX/PHP 框架的 PHP 端,现在我正在尝试实现客户端。
根据我以前使用模块化 Web 应用程序的经验,我知道有时需要一个特定模块的多个实例。例如,基于 Web 的两人游戏,每个用户都有页面部分。
在 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 对象?