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对于数据异步读取这块提供了异步加载的方法. 绑 ...
随机推荐
- 加快XCode编译链接速度(200%+)—XCode编译慢液
最近在一个大型项目的开发的时候遇到一个很头疼的问题,由于该项目的代码更,每次建立联系1纪要.浪费时间调试.因此,一些研究如何提高编译链接速度,这里给大家分享. 为了提高编译和链接的是以下三种方式的速度 ...
- C++中public,protected,private访问
对于公有继承方式: (1)父类的public成员成为子类的public成员,允许类以外的代码访问这些成员:(2)父类的private成员仍旧是父类的private成员,子类成员不可以访问这些成员:(3 ...
- MongoDB集群
高可用的MongoDB集群 1.序言 MongoDB 是一个可扩展的高性能,开源,模式自由,面向文档的数据库. 它使用 C++编写.MongoDB 包含一下特点: l 面向集合的存储:适合存储 ...
- JavasScript实现调查问卷插件
原文:JavasScript实现调查问卷插件 鄙人屌丝程序猿一枚,闲来无事,想尝试攻城师是感觉,于是乎搞了点小玩意.用js实现调查问卷,实现了常规的题型,单选,多选,排序,填空,矩阵等. 遂开源贴出来 ...
- Mac下一个/usr/include失踪
Mac升级到Yosemite后,突然发现vim的YouCompleteMe代码提示所以空头支票成员,排查了一下,原本/usr/include目录中缺少.所有的C/C++头文件不见了. .. 第一次发现 ...
- SQL点滴35—SQL语句中的exists
原文:SQL点滴35-SQL语句中的exists 比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers c WHE ...
- [Node.js框架] 为什么要开发 Codekart 框架
两年前,在被php的$符号和字符串处理折磨得半夜骂娘之后,我义无反顾地决定:珍爱生命,远离php. 之后一直在寻找一门“完美的语言”,先后接触了Lisp.python.java.Ruby.Lisp几乎 ...
- JSON解析之Gson
1.Gson简介 Gson是一个将Java对象转为JSON表示的开源类库,由Google提供,并且也可以讲JSON字符串转为对应的Java对象.虽然有一些其他的开源项目也支持将Java对象转为JSON ...
- ubuntu12.04 内核编译 记录
近期学习linux这门课,做实验要编译系统内核,然后..五一没事就捣鼓了一上午,还好成功了,以下就写下过程吧. 注意:以下过程的有些make 这类的命令 可能要获取权限 1.開始时能够查一下自己如今系 ...
- CSS知识点:清除浮动
开场白 我们平时工作中,很容易遇到浮动效果.一个DIV中嵌套多个DIV,左边显示一个DIV,右边显示一个DIV,外层DIV的高度随着内层内容的高度变化.这就是最基本的浮动效果.下图的百度搜索结果就是一 ...