千呼万唤始出来,终于到最后一个要点View了。照旧,先来一睹官方文档:

Backbone views are almost more convention than they are code — they don't determine anything about your HTML or CSS for you, and can be used with any JavaScript templating library. The general idea is to organize your interface into logical views, backed by models, each of which can be updated independently when the model changes, without having to redraw the page. Instead of digging into a JSON object, looking up an element in the DOM, and updating the HTML by hand, you can bind your view's render function to the model's "change" event — and now everywhere that model data is displayed in the UI, it is always immediately up to date.

继续蹩脚的翻译一下:

Backbone的View的使用相当方便 — 它不会影响任何的 HTML 或 CSS 代码,并且可以与任意 Javascript 模板引擎相结合。 基本的做法就是,将界面组织到逻辑视图,存放在模型,当模型数据发生改变,视图立刻自动更新,这一切都不需要重绘页面。 我们再也不必钻进 JSON 对象中,查找 DOM 元素,手动更新 HTML 了,通过绑定视图的 render 方法到模型的 "change" 事件 — 模型数据会即时的在 UI 中进行同步更新。

扫完文档,是不是觉得相当nice,但是backbone的页面数据自动变化是要手动来处理的,不像Angularjs会自动处理。至于这两种方式孰优孰劣,我只能说各有千秋,业务决定一切。

简单的View例子

    <div id="search_container"></div>

    <script type="text/x-template" id="search_template">
<label><%= search_label %></label>
<input type="text" id="search_input" />
<input type="button" id="search_button" value="Search" />
</script>
        var SearchView = Backbone.View.extend({
initialize: function(){
// this.render({search_label: "情怀搜索"});
},
render: function(context) {
//使用underscore这个库,来编译模板
var template = _.template($("#search_template").html())(context);
//加载模板到对应的el属性中
$(this.el).html(template);
}
});
var searchView = new SearchView({el: $("#search_container")}); //这个reander的方法可以放到view的构造函数中
//这样初始化时就会自动渲染
searchView.render({search_label: "情怀搜索"});

这算一个非常简单的视图渲染了。另外,JS模板推荐一下doT.js http://olado.github.io/doT/index.html,小巧,快速,强大!

view中event的使用

页面上的操作除了可以由之前的router来处理之外,在一个view中定义元素,还可以使用event来进行事件绑定。这里要注意的是在view中定义的dom元素是指你el标签所定义的那一部分dom节点,event进行事件绑定时会在该节点范围内查找。

var SearchView = Backbone.View.extend({
el: "#search_container", initialize: function(){
this.render({search_label: "搜索按钮"});
},
render: function(context) {
//使用underscore这个库,来编译模板
var template = _.template($("#search_template").html(), context);
//加载模板到对应的el属性中
$(this.el).html(template);
}, events:{ //就是在这里绑定的
//定义类型为button的input标签的点击事件,触发函数doSearch
'click input[type=button]' : 'doSearch' }, doSearch: function(event){
alert("search for " + $("#search_input").val());
} }); var searchView = new SearchView();

和$("input[type=button]").bind('click',function(){})相对比,似乎规范了不少。

View中模型与视图的绑定,事件的绑定等等,对于一个重前端业务逻辑的应用来说,确实更加便于开发。

总结

到本篇为止,Backbone.js的基础知识我们算是简单的了解了一下,也大概知道了利用Backbone.js来做开发的时候,大体开发模式是怎样的,数据、逻辑与视图三者间的关系也大体有了个基本的认识。

对于业务逻辑比较复杂的,使用MVC模式来进行开发,对数据,业务,视图的解耦比较有利,同时,也能在一定程度上降低开发的难度,以及后期维护的难度。

基本概念到此为止,使用的时候随时看看文档,估计能解决不少问题,再逛逛Stack Overflow等社区论坛估计就能填掉踩到的99%的坑了。剩余的1%,就看造化了。。。

Backbone.js学习之View的更多相关文章

  1. 【转】Backbone.js学习笔记(二)细说MVC

    文章转自: http://segmentfault.com/a/1190000002666658 对于初学backbone.js的同学可以先参考我这篇文章:Backbone.js学习笔记(一) Bac ...

  2. Backbone.js学习之Backbone.View(视图)

    Backbone.js为复杂WEB应用程序提供模型(models).集合(collections).视图(views)的结构.其中模型用于绑定键值数据和自定义事件:集合附有可枚举函数的丰富API: 视 ...

  3. Backbone.js学习之二

    经历一段自我修炼,终于领悟到Backbone.js的关键知识点,也发现了原来MVC可以在前端这样梦幻的发挥,Backbone.js确实是一个很有魅力的前端MVC框架. 练就一门技术,需要有扎实的功底, ...

  4. Backbone.js学习之初识hello-world

    说了好久好久要学习Backbone.js,现在终于下定决心开始学习了.然后呢,就根据我的学习进度在这里做个简单的记录,方便新人,也方便我自己以后回忆. 准备 用bower下载这几个库或框架也是醉了.. ...

  5. 【转】Backbone.js学习笔记(一)

    文章转自: http://segmentfault.com/a/1190000002386651 基本概念 前言 昨天开始学Backbone.js,写篇笔记记录一下吧,一直对MVC模式挺好奇的,也对j ...

  6. Backbone.js学习之一

    昨天一个我崇拜的朋友,徐飞送我一本名为<Backbone.js实战>书,让我心中狂喜,于是带着这份浓厚的兴趣,开始研究Backbone.js之路. 打开这本书的第一句话就很有哲理,“授人以 ...

  7. backbone.js学习笔记

    之前只接触过jQuery,看来Backbone是除了jQuery的第二大JS框架... backbone到底是个啥? 其实刚开始我也不知道=_=,我是这周二才听说居然还有这么个框架...于是乎我的导师 ...

  8. backbone.js 教程(1) View & Model & Collection

    Backbone.js Overview 它由Jeremy Ashkenas开发,最初发行于2010-10-13 它是一个轻量的JavaScript类库,只依赖于underscore.js,非强制依赖 ...

  9. Backbone.js学习之旅(一)

    前言 刚到粑粑公司,就学习各种框架,进行各种开发,为了纪念挥泪的青春,只好写下…… 希望能合您胃口^_^!!! The First(文件准备) backobone 强制依赖于 underscore.j ...

随机推荐

  1. Java集合框架(JCF)之collention

    一.概念:是为了实现某一目的或功能而预先提供的一系列封装好了的具有继承或实现的类与接口. 二.特点: 1.元素的类型可以不同  2.集合长度可变 3.空间不固定 三.collection与collec ...

  2. listView divider marginLeft marginRight

    要实现这样的效果: 新建drawable  用inset 进行实现.代码如下: <?xml version="1.0" encoding="utf-8"? ...

  3. JS函数的定义与调用方法

    JS函数调用的四种方法:方法调用模式,函数调用模式,构造器调用模式,apply,call调用模式 1.方法调用模式:先定义一个对象,然后在对象的属性中定义方法,通过myobject.property来 ...

  4. The Aggregate Magic Algorithms

    http://aggregate.org/MAGIC/ The Aggregate Magic Algorithms There are lots of people and places that ...

  5. discuz问题综合

    1.discuz x2搬家问题:搬家后,需要修改数据库的配置文件,包含:      主要的配置文件有三个:config目录下的config_global.php和config_ucenter.php以 ...

  6. Java常见排序算法之快速排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  7. C++中C/C++格式化输出

    对于不同的机器,一此格式化输出的函数经常会得不到正确的输出,比方小端上的程序在大端上执行等,另外,在日常程序开发时,也会经常被这种小问题而困扰非常久.终于发现是她的问题.不免有点叹息,以下对print ...

  8. 【M24】了解虚方法、多继承、虚基类、RTTI的成本

    1.编译器必须实现出C++语言的特性.一般情况下,我们只需要使用这些特性就好了,不需要关心内部的实现细节.但是,有些特性的实现,会对对象的大小和成员方法的执行速度造成影响.因此,有必要了解内部实现的细 ...

  9. Jquery ajax 绑定multiselect多选下拉选项,同时异步执行返回值

    Jquery ajax 绑定multiselect多选下拉选项,同时异步执行获取返回值 function load(mslt_employees,belongto,mark) {//传入$(#ID) ...

  10. Codeforces Round #306 (Div. 2) B. Preparing Olympiad dfs

    B. Preparing Olympiad Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/550 ...