Backbone.js 使用模板
前面一篇 Backbone.js HelloWorld,应用起步 只是让 Backbone 跑起来,实际的应用中会使用到模板,Model 等,而模板又是进阶的基础。所以这里介绍在 View 中使用模板,以及如何向模板填充值,模板可以用字符串,或是用 <script type="text/template"> 声明的内容。使用 <%= %> 或 <%- %> 来声明变量输出的占位符。
Backbone 的模板要用到的是 underscore.js 库, 要深入了解 Unserscore 就看官方的 Underscore.js 的文档,Underscore 的 template 方法的原型如下:
为突出效果,把 new AppView() 放到了 setTimeout() 延迟执行,项目中没必要这么做。
点击 http://fiddle.jshell.net/Unmi/A7MK7/ 看上面代码执行的效果,可以看到 Loading ... 在 1 秒后被替换成了 Hello World!
另外,如果前面声明 View 时没有对 el 赋值,可以在实例化 AppView 时指定
点击 http://fiddle.jshell.net/Unmi/2q6jJ/ 看执行效果,页面在一秒钟后显示 Hello Backbone!
注意,你不能直接加载页面中声明的其他元素,例如定义的
如果直接用 _template($("#who_template").html() 的话,执行后显示的就是 Hello <%= who %>。也就是说其中的变量值不会被解析,如果你的模板中无需填充值是可以这么做,但还需用 display:none 来隐藏掉它。
点击 http://fiddle.jshell.net/Unmi/4Rnzs/ 看看加载普通页面元素执行的效果。
我们还能直接在自定义 View 中使用 events 属性来定义事件,接下来我们去体验。
参考: What is a view? 永久链接 https://yanbin.blog/backbone-js-use-template/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明]
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
Backbone 的模板要用到的是 underscore.js 库, 要深入了解 Unserscore 就看官方的 Underscore.js 的文档,Underscore 的 template 方法的原型如下:
_.template(templateString, [data], [settings])下面是些完整的例子
一: 使用字符串模板
1<!DOCTYPE html>
2<html>
3 <head>
4 <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
5 <script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js"></script>
6 <script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone-min.js"></script>
7 </head>
8 <body>
9 <div id="container">Loading...</div>
10 </body>
11 </html>
12
13 <script>
14 var AppView = Backbone.View.extend({
15 el: '#container',
16 template: _.template("<h3>Hello <%= who %></h3>"),
17 //上行可写成 template: _.template("<h3>Hello <%- who %></h3>", {who: 'World!'}), // :1
18 initialize: function(options) {
19 this.render();
20 },
21 render: function() {
22 this.$el.html(this.template({who: 'World!'}));
23 //前面开启的是 :1 标识的代码,这里就写成 this.$el.html(this.template);
24 }
25 });
26
27 setTimeout(function(){
28 var appView = new AppView();
29 }, 1000);
30</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() 取出其中的内容。完整代码如下: 1<!DOCTYPE html>
2<html>
3 <head>
4 <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
5 <script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js"></script>
6 <script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone-min.js"></script>
7 </head>
8 <body>
9 <div id="container">Loading...</div>
10
11 <script type="text/template" id="who_template">
12 <h3>Hello <%= who %></h3>
13 </script>
14 </body>
15 </html>
16
17 <script>
18 var AppView = Backbone.View.extend({
19 el: '#container',
20 initialize: function(options) {
21 this.render();
22 },
23 render: function() {
24 var template = _.template($("#who_template").html());
25 this.$el.html(template({who: 'Backbone!'}));
26 }
27 });
28
29 setTimeout(function(){
30 var appView = new AppView();
31 }, 1000);
32</script>点击 http://fiddle.jshell.net/Unmi/2q6jJ/ 看执行效果,页面在一秒钟后显示 Hello Backbone!
注意,你不能直接加载页面中声明的其他元素,例如定义的
1<div id="who_template" style="display:none">
2 <h3>Hello <%= who %></h3>
3</div>如果直接用 _template($("#who_template").html() 的话,执行后显示的就是 Hello <%= who %>。也就是说其中的变量值不会被解析,如果你的模板中无需填充值是可以这么做,但还需用 display:none 来隐藏掉它。
点击 http://fiddle.jshell.net/Unmi/4Rnzs/ 看看加载普通页面元素执行的效果。
我们还能直接在自定义 View 中使用 events 属性来定义事件,接下来我们去体验。
参考: What is a view? 永久链接 https://yanbin.blog/backbone-js-use-template/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明]
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。