【web前端培训之前后端的配合(上)】以我们熟悉的Datalist说明问题吧
2013-06-05 00:37
441 查看
前言
白天的时间我们一起学习了bootstrap,虽然是刚开始学习,但是我们还是不得不承认他做得好,其中就我们到底是否使用一些朋友提出了自己的想法,我在讨论之中也受益啦!所以感谢各位的留言,我们不管用不用,还是得学习的,所以后面我们应该还会继续一起学习bootstrap。
好了,进入今天的正题吧,我这边前端培训的时间被再次压缩了,压缩到只有6天啦,我是这么想的:
第一天介绍CSS
第二天介绍JS
第三天介绍jquery
第四天介绍jquery easyui
第五天介绍ajax,并逐步将之前的成果形成最后的实例
第六天便直接进行实例讲解,也就是今天的内容
因为我们的后端同事是搞.net的,所以我这里搬出了大家都比较熟悉的datalist作为切入点,然后逐步讲解我们前后端如何配合以及为什么不使用服务器控件。
我这里是边学习边写的,最后肯定有很多没考虑到,各位要提出来哟!
Datalist·我是标题党:)
呵呵,我绝对是一个优秀的标题党,因为前端怎么会有datalist呢?所以我们这里来模拟一个看看呢(其实我原来也写过,但是那时候写的不够好)。有一段时间没有关注过后端开发了,甚至都忘了后端代码怎么写了呢,我们看datalist事实上就是:
1 给定一个html片段,里面具有数据表字段标志
2 数据绑定,将html片段中的变量与数据表进行替换
3 结束
/// <reference path="jquery-1.7.1.min.js" /> var DataItem = function () { this.data = null; this.el = null; this.id = ''; this.parentObj = null; this.idPrefix = 'item_'; //id前缀 this.className = ''; this.event = {}; this.elementEvent = {}; }; DataItem.prototype.load = function (index, data) { this.data = data; var parentEl = this.parentObj.el; //注意此处是parent已经赋值 var parentId = this.parentObj.id var id = parentId + this.idPrefix + index; //生成唯一id this.id = id; //注意啦,这里根据html片段开始生成最终数据了哦 var templateObj = this.templateObj; //此处的膜拜已经过处理 var tmpHtm = ''; $.each(templateObj, function (i, item) { if (item.field) { tmpHtm = tmpHtm + item.html + data[item.field] } else { tmpHtm = tmpHtm + item.html; } }); var el = $('<div></div>'); //形成dom //为了避免id重复,这里对id必须进行处理,我们同时不允许为元素设置id el.attr('id', id); el.html(tmpHtm); if (this.className) this.el.attr("class", this.className); parentEl.append(el); }; var Datalist = function () { this.id = new Date().getTime().toString(); this.items = []; //所具有的dataitem的项目 this.dataSource = null; //各位对他熟悉吧 this.container = $("body"); //我们的datalist的容器,没有指定的话就放在body里面 this.style = {}; //可以为其设置样式这里考虑的好像有点多了 this.attribute = {}; //为其设置属性 this.className = ''; this.itemClass = ''; //子元素的class this.template = ''; //可以在此设置,也可以指定容器id,然后由容器寻找 }; //好了,我们第一步需要 Datalist.prototype.formatTemplate = function () { var template = this.template; var reg = /\{%[\w]*\%}/; var para = reg.exec(template); var html = template; var templateObj = []; while (para && para.length > 0) { var len = para.index; var tmp = {}; tmp.html = html.substr(0, len); tmp.field = para[0].substr(2, para[0].length - 4); templateObj.push(tmp); html = html.substr(len + para[0].length); para = reg.exec(html); } tmp = {}; tmp.html = html; templateObj.push(tmp); this.templateObj = templateObj;//注意我们的datalist多了一个东西了哦 }; Datalist.prototype.bind = function () { //初始化属性等操作,我们暂时忽略之 //............... this.initElement(); //初始化元素 this.formatTemplate(); var scope = this; var itemIndex = 0; var container = this.container; container.append(this.el); //将datalist装入容器 $.each(this.dataSource, function (k, v) { var item = new DataItem(); //实例化了一个item了哦 item.parentObj = scope; item.templateObj = scope.templateObj; item.load(itemIndex, v); scope.items.push(item); itemIndex++; }); }; Datalist.prototype.initElement = function () { var el = $('<div id="' + this.id + '"></div>'); this.el = el; this.initAttribute(); this.initStyle(); }; Datalist.prototype.initAttribute = function () { var scope = this; var element = scope.el; $.each(scope.attribute, function (key, value) { if (typeof (value) == "string") if (value && value.length > 0) { element.attr(key, value); } }); }; Datalist.prototype.initStyle = function () { var scope = this; var element = this.el; var style = this.style; $.each(style, function (key, value) { if (value && value.length > 0) { element.css(key, value); } }); };
View Code
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script src="js/jquery-1.7.1.min.js" type="text/javascript"></script> <script src="js/Datalist.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function () { var _url = 'Ajax.aspx?sql=select * from bigType'; $.getJSON(_url, function (data) { var d = new Datalist(); d.template = 'id:{%id%},title{%title%}'; d.dataSource = data; d.bind(); }); }); </script> </head> <body> </body> </html>
别说,他还真把我们的东西读了出来呢!一个非常不好的地方就是他多了一个div并且多了一个id!!!现在我们将之拓宽一点:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <style type="text/css"> .box { margin: 10px; padding: 10px; border: 1px solid gray; display: inline-block; } </style> <script src="js/jquery-1.7.1.min.js" type="text/javascript"></script> <script src="js/Datalist.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function () { var _url = 'Ajax.aspx?sql=select * from bigType'; $.getJSON(_url, function (data) { var d = new Datalist(); d.template = 'tmp'; d.dataSource = data; d.bind(); }); }); </script> </head> <body> <textarea id="tmp"> <div class="box"> <h3> {%title%}</h3> <dl> <dt>{%id%}</dt> <dd>{%title%} </dd> </dl> </div> </textarea> </body> </html>
我们看见我们将模板写在了文本域里面(这样可以避免id重复神马的带来的不方便)
结语
好吧,今天已经很晚啦,我们明天继续,结束这一章的东西,明天会解决以下问题(或者说尝试解决。。。)1 datalist的嵌套
2 datalist的事件绑定
3 尝试减少多余的div
4 后端配合之拖动排序
5 后端配合之分屏
6 后端配合之移动
......
好啦好啦,我们睡觉吧。
相关文章推荐
- 【web前端培训之前后端的配合(上)】以我们熟悉的Datalist说明问题吧
- 【web前端培训之前后端的配合(中)】继续昨日的故事
- (转)【web前端培训之前后端的配合(中)】继续昨日的故事
- 【web前端培训之前后端的配合(中)】继续昨日的故事
- 做WEB开发的时候,前端与后端我们应该要注意哪些细节,哪些容易出现的漏洞?
- 前后端分离的j2ee的web项目,使用vue方式,即{{}}方式批量传入前端参数,遇到一个一个问题,页面上一开始有{{}},怎么处理?
- Java(web前端和后端)中相对路径问题
- 前端到后端乱码问题
- web前端问题(表格展示,加上可点元素变化,不经过后台,只前端进行处理)
- web也是区分前端与后端的,session\cookie辨析
- Web前端和后端之区分
- JS分页处理(web前端+后端JAVA)
- java web SpringMVC后端传json数据到前端页面
- Web前端性能优化的9大问题
- 前端后端分离,怎么解决SEO优化的问题?
- web前端开发:浏览器兼容问题汇总
- web前端安全机制问题全解析
- 前端和后端交互的一些原规范问题
- 基于Apache Tomee服务系统的web前端输入中文乱码问题解决办法
- web前端开发中遇到的细节问题