城东小巷分享 http://blog.sciencenet.cn/u/chengdong166

博文

基于原型的JavaScript分层框架

已有 4699 次阅读 2013-9-28 17:27 |个人分类:JS学习|系统分类:科研笔记| jquery, Javascript, 三层结构, eval

       为了能够更好的维护前端Javscript程序,利用原型将庞大的Javascript程序划分为eventlogicinteract三层结构。其中,event层用于给页面元素节点绑定事件;logic层属于业务逻辑实现层;interact层属于与后台交互层,如利用Ajax向服务器端发送请求以返回所需数据。Javascript的三层结构,可以实现业务逻辑与服务器端交互的分离,页面渲染与业务逻辑的分离。当然,更主要的是便于维护前端Javascript程序。Javascript程序的三层结构如下。

1. 利用构造函数及其原型。

       test = function() {

           //自定义一些对象属性...
       };

       test.prototype = {};

2.对程序三层分离

(1)event层

       test.prototype.event = {

           // 与业务逻辑层交互
            onExportBtnClick : function() {

                 // 事件处理函数,位于业务逻辑层
                 test_prototype.logic.exportData();
            }
       }

(2)logic层

       test.prototype.logic = {

            // 业务逻辑层承担着渲染页面、初始化元素节点、事件绑定、与interact层交互等任务...
            initQueryCommon : function() {
                 alert('初始化查询条件');
            },
            pageRendering : function() {
                 alert('页面渲染');
            },
            bindEvent : function() {
                 alert('事件绑定');
                 jQuery('#btn_export').click(test_prototype.event.onExportBtnClick);
            },
            exportData : function() {
                 test_prototype.interact.exportData();
            }
       }

(3)interact层

       test.prototype.interact = {

            // 利用Ajax等技术向服务器端发送请求并返回所需数据...
            exportData : function() {
                 alert('与后台进行交互...');
            }
       }

(4)缓存函数原型
       window.test_prototype = test.prototype;

3.构造JS对象实例工厂

       BeanFactory = {
            /**
             * 获得JS对象实例方法 .
             *
             * @param {String} beanName 要实例化的JS类名
             * @return {Object...} args JS类构造函数参数
             */
            getInstance : function(beanName, args) {
                 var constructorArgs = Array.prototype.slice.call(arguments, 1);
                 var evalStr = 'new ' + beanName + '(';
                 for (var i = 0, ilen = constructorArgs.length; i < ilen; i++) {
                      if (i < ilen - 1) {
                           evalStr += 'constructorArgs[' + i + '],'
                      } else {
                           evalStr += 'constructorArgs[' + i + ']'
                      }
                  }
                 evalStr += ');';
                 var instance = eval(evalStr);
                 if (typeof instance.event === 'undefined') {
                      instance.event = {};
                 }
                 if (typeof instance.logic === 'undefined') {
                      instance.logic = {};
                 }
                 if (typeof instance.interact === 'undefined') {
                      instance.interact = {};
                 }
                 instance.event.parentObj = instance.logic.parentObj = instance.interact.parentObj = instance;
                 return instance;
            }

}

4. 测试

5. 测试效果

       访问http://localhost:8080/mytest/commonJsDemo/queryFrame.html,分别弹出“查询条件”、“页面渲染”、“事件绑定”三个对话框。当点击“导出”按钮时会弹出“与后台进行交互...”对话框。

 

6.附件

WebRoot.rar

 



https://blog.sciencenet.cn/blog-448935-728551.html

上一篇:数据库事务
下一篇:jQuery操作DOM
收藏 IP: 110.113.166.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-28 17:00

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部