backbone中的view实例

本文介绍Backbone.js中视图(View)的基本用法,包括初始化、DOM元素绑定、模板渲染及事件处理等核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:http://blog.youkuaiyun.com/the_fire/article/details/7460385

Backbone的view是用来显示你的model中的数据到页面的,同时它也可用来监听DOM上的事件然后做出响应。
先要给出一个页面的大体代码,下面的所有试验代码都要放到这里面:

[html]  view plain copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <title>the5fire-backbone-view</title>  
  5. </head>  
  6. <body>  
  7.     <div id="search_container"></div>  
  8.       
  9.     <script type="text/template" id="search_template">  
  10.         <label><%= search_label %></label>  
  11.         <input type="text" id="search_input" />  
  12.         <input type="button" id="search_button" value="Search" />  
  13.     </script>  
  14. </body>  
  15. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>  
  16. <script src="http://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.4/underscore-min.js"></script>  
  17. <script src="http://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min.js"></script>  
  18. <script>  
  19. (function ($) {  
  20.            //此处添加下面的试验代码    
  21. })(jQuery);  
  22. </script>  
  23. </html>  


1、一个简单的view

SearchView  = Backbone. View. extend ( {

    initialize :  function ( ) {

         alert ( 'init a SearchView' ) ;

     }

} ) ;

var searchView  =  new SearchView ( ) ;

是不是觉得很没有技术含量,所有的模块定义都一样。

2、 el属性

这个属性用来引用DOM中的一些元素,每一个Backbone的view都会有这么个属性,

如果没有显示声明,Backbone会默认的构造一个,表示一个空的div元素

SearchView  = Backbone. View. extend ( {

    initialize :  function ( ) {

         alert ( 'init a SearchView' ) ;

     }

} ) ;

var searchView  =  new SearchView ( {el : $ ( "#search_container" ) } ) ;

接着来看这个el的应用,首先注意标签中的这个标签,这是我们定义的一个模板。

SearchView  = Backbone. View. extend ( {

    initialize :  function ( ) {

         //this.render();

     } ,

    render :  function ( )  {

         //使用underscore这个库,来编译模板

         var template  = _. template ($ ( "#search_template" ). html ( ) , { } ) ;

         //加载模板到对应的el属性中

         this. el. html (template ) ;

     }

} ) ;

var searchView  =  new SearchView ( {el : $ ( "#search_container" ) } ) ;

searchView. render ( ) ;   //这个reander的方法可以放到view的构造函数中

运行页面之后,会发现script模板中的html代码已经添加到了我们定义的div中。

3、再来看对DOM中元素事件的绑定,很简单

[javascript]  view plain copy
  1. SearchView = Backbone.View.extend({  
  2.   
  3.     initialize: function(){  
  4.   
  5.         this.render();  
  6.   
  7.     },  
  8.   
  9.     render: function() {  
  10.   
  11.         //使用underscore这个库,来编译模板  
  12.   
  13.         var template = _.template($("#search_template").html(),{});  
  14.   
  15.         //加载模板到对应的el属性中  
  16.   
  17.         this.el.html(template);  
  18.   
  19.     },  
  20.   
  21.     events:{  //就是在这里绑定的  
  22.   
  23.         'click input[type=button]' : 'doSearch'  //定义类型为button的input标签的点击事件,触发函数doSearch  
  24.   
  25.     },  
  26.   
  27.     doSearch: function(event){  
  28.   
  29.         alert("search for " + $("#search_input").val());  
  30.   
  31.     }  
  32.   
  33. });  
  34.   
  35. var searchView = new SearchView({el: $("#search_container")});  

自己运行下,是不是很简答,比写$(“input[type=button]“).bind(‘click’,function(){})好看多了吧。

4、view中的模板

如果你用过django模板的话,你应该会想到前面提到的模板和django模板是不是有同样的功能,既然是模板,那就应该能传入数据。

没错了,这个和django的使用一样,可以在模板中定义变量,然后通过字典的方式传递进去

注意script模板的变化

[javascript]  view plain copy
  1. SearchView = Backbone.View.extend({  
  2.   
  3.     initialize: function(){  
  4.   
  5.         this.render();  
  6.   
  7.     },  
  8.   
  9.     render: function() {  
  10.   
  11.         //使用underscore这个库,来编译模板  
  12.   
  13.         var template = _.template($("#search_template").html(),{search_label: "the5fire search"});  
  14.   
  15.         //加载模板到对应的el属性中  
  16.   
  17.         this.el.html(template);  
  18.   
  19.     },  
  20.   
  21.     events:{  //就是在这里绑定的  
  22.   
  23.         'click input[type=button]' : 'doSearch'  //定义类型为button的input标签的点击事件,触发函数doSearch  
  24.   
  25.     },  
  26.   
  27.     doSearch: function(event){  
  28.   
  29.         alert("search for " + $("#search_input").val());  
  30.   
  31.     }  
  32.   
  33. });  
  34.   
  35. var searchView = new SearchView({el: $("#search_container")});  


再次运行,有木有觉得这个东西对dom的操作还是很好玩的。

别激动,再来稍微扩展一下

对于实际应用来说,页面数据的变化需要同步到服务器端,最理想的方法,只是回传变化的数据就ok,然后修改页面上对应的数据,而不是刷新页面。

[javascript]  view plain copy
  1. SearchView = Backbone.View.extend({  
  2.   
  3.     initialize: function(){  
  4.   
  5.         this.render('the5fire');  
  6.   
  7.     },  
  8.   
  9.     render: function(search_label) {  
  10.   
  11.         //使用underscore这个库,来编译模板  
  12.   
  13.         var template = _.template($("#search_template").html(),{search_label: search_label});  
  14.   
  15.         //加载模板到对应的el属性中  
  16.   
  17.         this.el.html(template);  
  18.   
  19.     },  
  20.   
  21.     events:{  //就是在这里绑定的  
  22.   
  23.         ​'click input[type=button]' : 'doChange'     //注意,input标签必须是search_container的子标签
  24.   
  25.     },  
  26.   
  27.     doChange: function(event){  
  28.   
  29.         //通过model发送数据到服务器  
  30.   
  31.         this.render('the5fire' + $("#search_input").val());  
  32.   
  33.     }  
  34.   
  35. });  
  36.   
  37. var searchView = new SearchView({el: $("#search_container")});  

这是一个比较牵强的例子,但是如果加上model的使用,效果就会好很多,通过view和model可以使得业务和数据真正的分离。

总之,view的主要应用就是绑定事件,处理业务,渲染页面。

本文链接: http://www.the5fire.net/6-backbone-view.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值