IceMx.Mvc 我的js MVC 框架 二、视图的数据绑定
介绍
本人菜鸟,一些自己的浅薄见解,望各位大神指正。
本框架有以下优点
1、简单(调用简单、实现简单、不过度设计)
2、视图、控制器、模型分离(分离对于维护十分有必要)
3、组件化(每一个mvc模块儿的实现都是一个组件的实现,M+V+C = 组件)
上一篇通过html文件来实现了html代码的分离,也就是视图了。
数据绑定的几种情况
载入视图以后的操作通常伴随着数据绑定
1、最简单的情况(直接替换)
<div>@{title}</div>
<div>@{content}</div>
<div>@{insTime}</div>
像这样的视图直接用正则表达式,将数据中对应的字段值替换视图中的部分就可以了,正则表达式如下。
RegExp("@{[a-z,A-Z,0-9,_]+}", "g");
2、有些是列表的循环绑定
<div>@{discussContent}</div>
<div>@{insTime}</div>
像这样的要循环这个模板产生html代码然后填充到相应位置。
var muBan = DiscussView.Get("view1");
var list = DiscussModel.GetList();
$.each(list,function(i,discuss){
muBan+=IceMx.Model.Format(muBan,discuss);
})
$(muBan).appendTo($body);
3、还有一些时候情况比较特殊,举例说明
<div>评论内容</div>
<div><textarea></textarea></div>
<div><input value='表情' onclick='Face.Show()' /><div>
如果现在要循环以上模板绑定数据,Face.Show(txtId)是一个共通方法,这个方法有一个参数txtId,该参数对应模板中的textarea的id。
那么现在问题就来了,如果在模板直接写死id的话循环出来的列表id都是一样的,肯定出问题。
解决思路是如果能在循环的同时给文本框和表情按钮都绑定一个随机的id,而且这两个id一样这样问题就能解决了。
具体的数据绑定代码如下
IceMx.Model = {
Format: function (htm, data) {
var iceTagReg = new RegExp("@{[a-z,A-Z,0-9,_]+}", "g");
var iceTag;
while (iceTag = iceTagReg.exec(htm)) {
iceTag = iceTag[0];
iceTagReg = new RegExp("@{[a-z,A-Z,0-9,_]+}", "g");
//iceId处理
var iceId = iceTag.match(/@{iceId[0-9]}/g);
if(iceId){
iceId = iceId[0];
iceId = iceId.substring(2, iceId.length - 1);
if (!data[iceId]) {
data[iceId] = IceMx.GetIceId();
}
}
//值替换
var theAttr = iceTag.substr(2, iceTag.length - 3);
var theValue = data[theAttr];
if (theValue != undefined) {
htm = htm.replace(iceTag, theValue);
} else {
htm = htm.replace(iceTag, "@@!!!!^====" + theAttr + "!!!!^!!!!@");
}
}
htm = htm.replace("@@!!!!^====", "@{");
htm = htm.replace("!!!!^!!!!@", "}");
return htm;
}
};
IceMx.GetIceId是一个获取随机id的方法
这样的话模板就可以改成这样
<div>评论内容</div>
<div><textarea id='@{iceId1}'></textarea></div>
<div><input value='表情' onclick='Face.Show(@{iceId1})' /><div>
绑定方法依然是这个
var muBan = DiscussView.Get("view1");
var list = DiscussModel.GetList();
$.each(list,function(i,discuss){
muBan+=IceMx.Model.Format(muBan,discuss);
})
$(muBan).appendTo($body);
其他
若有兴趣请关注分类下的其他文章,如果能得到您的支持将不甚感激。
IceMx.Mvc 我的js MVC 框架 二、视图的数据绑定的更多相关文章
- IceMx.Mvc 我的js MVC 框架 三、动手来写一个评论模块儿
介绍 本人菜鸟,一些自己的浅薄见解,望各位大神指正. 本框架有以下优点 1.简单(调用简单.实现简单.不过度设计) 2.视图.控制器.模型分离(分离对于维护十分有必要) 3.组件化(每一个mvc模块儿 ...
- IceMx.Mvc 我的js MVC 框架 开篇
开篇 这篇文章是后补的,前端时间想写一些对于js开发的一些理解,就直接写了,后来发现很唐突,所以今天在这里补一个开篇. 我的js Mvc 框架 基于实用设计,过分设计等于没设计.本着简单的原则,它只实 ...
- IceMx.Mvc 我的js MVC 框架五、完善植物大战僵尸(雏形版增加动画)
有图有真相 说明 实在找不到僵尸的素材,从网上扒了一个山寨的僵尸,只有4张的一个连续图片,所以动作有点僵硬,植物的图片是自己处理的,非专业所以……咳咳!. 背景是自己抠下来2块儿拼接的,看在这么辛苦的 ...
- IceMx.Mvc 我的js MVC 框架 一、html代码的分离(视图)
介绍 本人菜鸟,一些自己的浅薄见解,望各位大神指正. 本框架有以下优点 1.简单(调用简单.实现简单.不过度设计) 2.视图.控制器.模型分离(分离对于维护十分有必要) 3.组件化(每一个mvc模块儿 ...
- IceMx.Mvc 我的js MVC 框架四、试水植物大战僵尸(雏形版)
有图有真相 开始 最近老婆在家迷上了植物大战僵尸,每天回去躺床上就玩,有一天居然跟我说冰箱后边爬着好几只僵尸,当时我就惊呆了,后来才知道她是在说蟑螂,我去. 闲言少叙,书归正传,这是一个雏形,没有在界 ...
- IceMx.Mvc 我的js MVC 框架七、完善植物大战僵尸(增加阳光的消费和获得)
话不多说,先上图 这次增加了阳光的消费和获得,增加了阳光的点击动画 重新排布了布局 有兴趣的话就研究下吧. 上一篇有朋友说让我把项目放到github上面维护,本人没用过这个,肯请朋友们帮小弟科普一下放 ...
- IceMx.Mvc 我的js MVC 框架六、完善植物大战僵尸(向日葵登场)
有图有真相,废话不多说上图 看到园友的支持很受鼓舞,更觉得应该做下去,虽然自己是个菜鸟,但也应该共享自己的心得,只要有人获益那就是值得的. 我的下载需要csdn论坛的1个积分,之所以不完全免费出去是因 ...
- MVC 中如果js,css文件放到视图文件夹无法访问的解决办法
在视图配置文件web.config 中添加如下节点,注意:此web.config 是视图文件夹中的,在你的views视图中可以找到<system.webServer>开头的<hand ...
- ECharts.js学习(二)动态数据绑定
Echarts 数据绑定 简单的统计表已经可以生成,不过之前图标数据都是直接写在参数里面的,而实际使用中,我们的数据一般都是异步读取的.EChart.js对于数据异步读取这块提供了异步加载的方法. 绑 ...
随机推荐
- api接口对于客户端的身份认证方式以及安全措施
转载 基于http协议的api接口对于客户端的身份认证方式以及安全措施 由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsession ...
- iOS开展 - 中国 iOS/Mac 开发博客列表
博客地址 RSS地址 OneV's Den http://onevcat.com/atom.xml 破船之家 http://beyondvincent.com/atom.xml NSHipster h ...
- CentOS-6.3安装配置SVN
安装说明 系统环境:CentOS-6.3 安装方式:yum install (源码安装容易产生版本兼容的问题) 安装软件:系统自动下载SVN软件 检查已安装版本 #检查是否安装了低版本的SVN [ro ...
- JavaScript插件化开发
大熊君JavaScript插件化开发 一,开篇分析 Hi,大家好!大熊君又和大家见面了,还记得昨天的那篇文章吗------这个系列的开篇(第一季).主要讲述了以“jQuery的方式如何开发插件”, 那 ...
- POI导出大量数据的简单解决方案(附源码)-Java-POI导出大量数据,导出Excel文件,压缩ZIP(转载自iteye.com)
说明:我的电脑 2.0CPU 2G内存 能够十秒钟导出 20W 条数据 ,12.8M的excel内容压缩后2.68M 我们知道在POI导出Excel时,数据量大了,很容易导致内存溢出.由于Excel ...
- EasyUI的后台界面
EasyUI的后台界面搭建及极致重构 〇.前言 要了解一个东西长什么样,至少得让我们能看到,才能提出针对性的见解.所以,为了言之有物,而不是凭空漫谈,我们先从UI说起,后台管理页面的UI我们将使用应用 ...
- 关于session_start()这个问题
关于session_start()这个问题,其实网上很多解决的方法,论坛也好多人回答这类的问题, 现在的状况是依然有警告提示Warning: session_start() [function.ses ...
- IIS服务器 远程发布(Web Deploy)配置 VS2010 开发环境 Windows Server 2008服务器系统
原文:IIS服务器 远程发布(Web Deploy)配置 VS2010 开发环境 Windows Server 2008服务器系统 asp.net 网站有三种常用的发布方式:分别是拷贝开发机上发布好的 ...
- Asterisk 未来之路3.0_0005
原文:Asterisk 未来之路3.0_0005 第二章: Asterisk的架构 Asterisk 和其他众多传统的PBX是有区别的,拨号方案针对各种通道处理本质上采用同一种方式. 在传统的PB ...
- C# 在本地创建文件夹及子文件夹
string dict = @"d:\估价报告\"; if (!Directory.Exists(dict)) { Directory.CreateDirectory(dict); ...