Backbone.js 使用模板
实际的应用中会使用到模板,Model 等,而模板又是进阶的基础。所以这里介绍在 View 中使用模板,以及如何向模板填充值,模板可以用字符串,或是用 <script type="text/template"> 声明的内容。使用 <%= %> 或 <%- %> 来声明变量输出的占位符。
Backbone 的模板要用到的是 underscore.js 库, 要深入了解 Unserscore 就看官方的 Underscore.js 的文档,Underscore 的 template 方法的原型如下:
_.template(templateString, [data], [settings])
下面是些完整的例子
一: 使用字符串模板
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone-min.js"></script>
</head>
<body>
<div id="container">Loading...</div>
</body>
</html> <script>
var AppView = Backbone.View.extend({
el: '#container',
template: _.template("<h3>Hello <%= who %></h3>"),
//上行可写成 template: _.template("<h3>Hello <%- who %></h3>", {who: 'World!'}), // :1
initialize: function(options) {
this.render();
},
render: function() {
this.$el.html(this.template({who: 'World!'}));
//前面开启的是 :1 标识的代码,这里就写成 this.$el.html(this.template);
}
}); setTimeout(function(){
var appView = new AppView();
}, 1000);
</script>
为突出效果,把 new AppView() 放到了 setTimeout() 延迟执行,项目中没必要这么做。
点击 http://fiddle.jshell.net/Unmi/A7MK7/ 看上面代码执行的效果,可以看到 Loading ... 在 1 秒后被替换成了 Hello World!
另外,如果前面声明 View 时没有对 el 赋值,可以在实例化 AppView 时指定 el 属性,像下面那样使用
new AppView({el: $("#container")})
二. 加载模板
可以加载页面中用 <script type="text/template"> 包含的内容作为模板,它本身不会在页面中显示 出来的。下面是用 jQuery 的选择器来定位这个模板声明,html() 取出其中的内容。完整代码如下:
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone-min.js"></script>
</head>
<body>
<div id="container">Loading...</div> <script type="text/template" id="who_template">
<h3>Hello <%= who %></h3>
</script>
</body>
</html> <script>
var AppView = Backbone.View.extend({
el: '#container',
initialize: function(options) {
this.render();
},
render: function() {
var template = _.template($("#who_template").html());
this.$el.html(template({who: 'Backbone!'}));
}
}); setTimeout(function(){
var appView = new AppView();
}, 1000);
</script>
点击 http://fiddle.jshell.net/Unmi/2q6jJ/ 看执行效果,页面在一秒钟后显示 Hello Backbone!
注意,你不能直接加载页面中声明的其他元素,例如定义的
<div id="who_template" style="display:none">
<h3>Hello <%= who %></h3>
</div>
如果直接用 _template($("#who_template").html() 的话,执行后显示的就是 Hello <%= who %>。也就是说其中的变量值不会被解析,如果你的模板中无需填充值是可以这么做,但还需用 display:none 来隐藏掉它。
点击 http://fiddle.jshell.net/Unmi/4Rnzs/ 看看加载普通页面元素执行的效果。
我们还能直接在自定义 View 中使用 events 属性来定义事件,接下来我们去体验。
参考: What is a view?
Backbone.js 使用模板的更多相关文章
- MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录
注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是 ...
- 我对Backbone.js的一些认识
backbone.js已经不是当前最流行的前端框架了,但是对于我而言,依然具有比较好的学习价值.虽然目前来说,react,vue等mvvm框架非常火热,但是感觉自身还不到去使用这种框架的层次.这些技术 ...
- Backbone.js学习之Backbone.View(视图)
Backbone.js为复杂WEB应用程序提供模型(models).集合(collections).视图(views)的结构.其中模型用于绑定键值数据和自定义事件:集合附有可枚举函数的丰富API: 视 ...
- [转]backbone.js template()函数
本文转自:http://book.2cto.com/201406/43974.html 本文所属图书 > Backbone.js实战 资深Web开发专家根据Backbone js最新版本撰写,对 ...
- [转]backbone.js 初探
本文转自:http://weakfi.iteye.com/blog/1391990 什么是backbone backbone不是脊椎骨,而是帮助开发重量级的javascript应用的框架. 主要提供了 ...
- Backbone.js学习之一
昨天一个我崇拜的朋友,徐飞送我一本名为<Backbone.js实战>书,让我心中狂喜,于是带着这份浓厚的兴趣,开始研究Backbone.js之路. 打开这本书的第一句话就很有哲理,“授人以 ...
- 用Backbone.js创建一个联系人管理系统(一)
原文 Build a Contacts Manager Using Backbone.js: Part 1 在这个教程里我们将会使用Backbone.js,Underscore.js,JQuery创建 ...
- [backbone] Getting Started with Backbone.js
一.简介 Backbone 是一个 JavaScript MVC 框架,它属于轻量级框架,且易于学习掌握.模型.视图.集合和路由器从不同的层面划分了应用程序,并负责处理几种特定事件.处理 Ajax 应 ...
- 使用Underscore.js的template将Backbone.js的js代码和html代码分离
这段时间在学习Require.js和Backbone.js的过程中,发现有些项目里的HTML代码都是写在View的js代码里面的,渲染的时候需要对Collection进行循环,再将HTML代码拼接上去 ...
随机推荐
- BZOJ.4909.[SDOI2017]龙与地下城(正态分布 中心极限定理 FFT Simpson积分)
BZOJ 洛谷 https://www.luogu.org/blog/ShadowassIIXVIIIIV/solution-p3779# 正态分布 正态分布是随机变量\(X\)的一种概率分布形式.它 ...
- BZOJ.4832.[Lydsy1704月赛]抵制克苏恩(期望DP)
题目链接 \(f[s][i][j][k]\)表示还剩\(s\)次攻击,分别有\(i,j,k\)个血量为\(1,2,3\)的奴隶主时,期望受到伤害. 因为期望是倒推,所以这么表示从后往前求,注意\(a, ...
- 【BZOJ-4016】最短路径树问题 Dijkstra + 点分治
4016: [FJOI2014]最短路径树问题 Time Limit: 5 Sec Memory Limit: 512 MBSubmit: 1092 Solved: 383[Submit][Sta ...
- Codeforces Round #371 (Div. 2) D. Searching Rectangles 交互题 二分
D. Searching Rectangles 题目连接: http://codeforces.com/contest/714/problem/D Description Filya just lea ...
- LPC43xx SGPIO Configuration -- Why not use GPDMA ?
LPC43xx SGPIO Configuration The LPC43xx SGPIO peripheral is used to move samples between USB and the ...
- vbs学习笔记2——创建桌面快捷方式
脚本 Set WshShell = WScript.CreateObject("WScript.Shell") strDesktop = WshShell.SpecialFolde ...
- dotNetSpider 手记
准备工作: 从github上download工程. 安装VS2017. 安装 .net core 2.0. 编译通过. 基础架构: 调度器 Scheduler 从根site开始,向 Downloade ...
- TVB三个台
翡翠台http://token.tvb.com/stream/live/hls/mobilehd_jade.smil 高清翡翠,http://token.tvb.com/stream/live/hls ...
- xamarin 断点 不命中
Async Debugging Breakpoints not being hit breakpoint in Android library project not hit when disable ...
- 一些 Google 搜索词
(1) flex blazeds java; (2) flex 动画 || flex animation || flex spark glow animation (3) flex glow效果 ...