Javascript MVC 学习笔记(三) 视图和模板
模板
Javascript中模板的核心概念是,将包括模板变量的HTML片段和Javascript对象做合并。把模板变量替换为对象中的属性值。
书中讲到了几种库作为模板引擎,可是链接失效了。能够在这里下载,链接:jQuery.tmpl
使用方式非常easy,看一下它的说明即可了。给定一个模板。通过给它加入数据就能生成渲染好的元素节点。然后就能够将它加入到页面中,主要用法如:
//数据
var object = {
url: "http://example.com",
getName: function(){
return "Trevor";
}
};
//模板
var template = '<li><a href="${url}">${getName()}</a></li>';
//生成渲染的元素
var element = $.tmpl(template, object);
//加入到body中
$("body").append(element);
能够看到使用${}
来书写插入的变量,再依据传入到$.tmpl()
的object
的相应属性名获取到详细的值。上面的实例将会生成一个<li><a href="http://example.com">Trevor</a></li>
,并插入到body的最后。
模板功能还有非常多。比方条件和迭代,使用过EL表达式的同学都应该好理解。详细用法能够去百度谷歌一下。
对于模板的存储。能够保存在<script>
标签里,通过标签的id获取模板的引用。
比方:
<!-- 存放模板 -->
<script type="text/x-jquery-tmpl" id="someTemplate">
<span>${getName()}</span>
</script>
<script>
var data = {
getName: function(){
return "Bob";
}
}
var element = $("#someTemplate").tmpl(data);
element.appendTo("body");
</script>
绑定
本质上讲。绑定将视图元素和Javascript对象(一般是模型)挂街在一起。当模型改变时,视图将依据改变后的对象做适时更新。
绑定意味着当记录发生改变的时候控制器不必处理视图的更新,由于更新已经自己主动完毕了。使用绑定也为构建实时应用程序打下了基础。
比方有一个ul
列表,显示应用中的用户。我们须要创建用户的时候让ul
也动态改变。
<ul id="users">
</ul>
一个用户相应一个li
元素,所以创建一个模板保存username:
<script type="text/x-jquery-tmpl" id="userTmpl">
<li>${name}</li>
</script>
然后将模型和视图进行绑定:
//模型
var User = function(name){
this.name = name;
};
//存放用户的数组
User.records = [];
//为用户绑定自己定义事件
User.bind = function(ev, callback){
//初始化_callbacks(该对象属性为事件名,值为相应的事件处理函数)
this._callbacks || (this._callbacks = {});
//初始化_callbacks[ev](一个数组,里面存放该事件的事件处理函数)
(this._callbacks[ev] || (this._callbacks[ev] = [])).push(callback);
}
//触发自己定义事件
User.trigger = function(ev){
var list;
if(!this._callbacks){
return;
}
//获取全部事件处理函数
if(!(list = this._callbacks[ev])){
return;
}
//全部运行
$.each(list, function(){
this();
})
}
//创建用户
User.create = function(name){
//存放用户
this.records.push(new this(name));
//触发自己定义事件
this.trigger("change");
};
$(function(){
//绑定事件
User.bind("change", function(){
//创建模板,传入一个数组代表将该数组内全部对象分别渲染模板。有多少个对象创建多少个模板
var template = $("#userTmpl").tmpl(User.records);
//又一次渲染ul
$("#users").empty().append(template);
});
});
能够看到在User.create
方法里面触发了change
事件,而通过bind
绑定的函数里面通过获取User.records
又一次渲染了ul
,所以每次加入用户都会让ul
刷新一次。
调用一下create方法:
User.create("zhangsan");
User.create("lisi");
效果立刻就出来了:
Javascript MVC 学习笔记(三) 视图和模板的更多相关文章
- Javascript MVC 学习笔记(一) 模型和数据
写在前面 近期在看<MVC的Javascript富应用开发>一书.本来是抱着一口气读完的想法去看的.结果才看了一点就傻眼了:太多不懂的地方了. 仅仅好看一点查一点,一点一点往下看吧,进度虽 ...
- Javascript MVC 学习笔记(二) 控制器和状态
今天进入第二个部分:控制器. 控制器和状态 从以往的开发经验来看.我们都是将状态保存在server的session或者本地cookie中,但Javascript应用往往被限制在单页面,所以我们也能够将 ...
- angular学习笔记(三)-视图绑定数据的两种方式
绑定数据有两种方式: <!DOCTYPE html> <html ng-app> <head> <title>2.2显示文本</title> ...
- MVC学习笔记索引帖
[MVC学习笔记]1.项目结构搭建及单个类在各个层次中的实现 [MVC学习笔记]2.使用T4模板生成其他类的具体实现 [MVC学习笔记]3.使用Spring.Net应用IOC(依赖倒置) [MVC学习 ...
- .NET MVC 学习笔记(三)— MVC 数据显示
. NET MVC 学习笔记(三)—— MVC 数据显示 在目前做的项目中,用的最多的数据展示控件就是table展示(说不是的请走开,不是一路人),以下详细阐述下table的使用方法. 先看效果: 上 ...
- MVC学习笔记(三)—用EF向数据库中添加数据
1.在EFDemo文件夹中添加Controllers文件夹(用的是上一篇MVC学习笔记(二)—用EF创建数据库中的项目) 2.在Controllers文件夹下添加一个空的控制器(StudentsCon ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- Spring MVC 学习笔记一 HelloWorld
Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...
- Spring MVC 学习笔记11 —— 后端返回json格式数据
Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...
随机推荐
- 实用and常用shell命令汇编
很久没写blog了,基本都在用 github和笔记.现在将一些常用的shell并且很使用的shell用法分享一下: 分行读取,切割,计数: cat product.txt | while read l ...
- SVN的三种merge方式【转】
SVN的merge操作是为了保证主干(trunk)和分支(branch)同步,merge方式有: 1.Merge a range of revisions(合并一个范围的版本) 2.Reintegra ...
- WEB前端响应式布局之BootStarp使用
1.Bootstrap简介:1. 概念: 一个前端开发的框架,Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JavaScript 的 ...
- Windows提高_1.1内核对象
内核对象 什么是内核对象? 内核对象本质上是一个结构体,我们不能直接的操作一个内核对象,需要通过操作系统提供的一系列函数和我们使用的内核对象句柄对它进行一系列的修改. 如何操作内核对象? 创建一个内核 ...
- 并发编程学习笔记(12)----Fork/Join框架
1. Fork/Join 的概念 Fork指的是将系统进程分成多个执行分支(线程),Join即是等待,当fork()方法创建了多个线程之后,需要等待这些分支执行完毕之后,才能得到最终的结果,因此joi ...
- pyhon模块
模块基础 什么是模块 模块式一系列功能的集合体,而函数是某一个功能的集合体,因此模块可以看成是一堆函数的集合体.一个py文件内部可以放一堆函数,因此一个py文件就可以看成是一个模块.如果这个py文件的 ...
- MySQL:INSERT ... UPDATE
在 INSERT 语句末尾指定ON DUPLICATE KEY UPDATE时,如果插入的数据会导致表中的 UNIQUE 索引或 PRIMARY KEY 出现重复值,则会对导致重复的数据执行 UPDA ...
- Linux内核-内存回收逻辑和算法(LRU)
Linux内核内存回收逻辑和算法(LRU) LRU 链表 在 Linux 中,操作系统对 LRU 的实现主要是基于一对双向链表:active 链表和 inactive 链表,这两个链表是 Linux ...
- 带返回值的线程Callable
- Xmind的使用
Xmind是用来学习整理思维的工具