zoukankan      html  css  js  c++  java
  • 《backbone.js》学习笔记

    第一章  理解Backbone

    一、概念

      Backbone.js是一套基于(模型-视图-控制器 MVC)模式的轻量级的javascript框架。


    二、使用MVC模式设计应用

    1、模型:应用程序运行所需要的数据和业务逻辑.

    2、视图:负责把模型展示给用户.

    3、控制器:负责响应用户的输入,更新模型和视图.

    简单术语翻译对照:散列表(hash)、 模型(model)、 视图(view) 、集合(collection)、 回调函数(callback)、 绑定(bind)

    三、下载和依赖

      Backbone.js 唯一重度依赖 Underscore.js.

      对于 RESTful , history 的支持依赖于 Backbone.Router ,

      DOM 处理依赖于 Backbone.View , json2.js, 和 jQuery ( > 1.4.2) 或 Zepto 之一.

    四、API参考

      http://www.css88.com/doc/backbone/#Events-bind    中文文档

      http://www.the5fire.com/the5fire-mobile-site-base-on-backbonejs.html    实例

    第二章  模型

    一、创建一个模型

      模型负责存放应用于所需的数据、对数据进验证、执行访问控制以及实现所需特定的业务逻辑,可以通过Backbone.Model对象的方式来定义一个模型.

     1 <script>
     2     var sModel = Backbone.Model.extend({         // 创建一个模型
     3 
     4     })
     5 
     6     var newModel = new sModel({             // 实例化模型,并设置初始值
     7         lastNumber: "04,04,04",
     8         closeTime: "2014-12-01 15:52:09",
     9         "status": "55",
    10         "issue": "141201037"
    11     });
    12 
    13     $("#sidebar").html(newModel.get("lastNumber"));
    14 </script>
    15 
    16 // 或者可以写成
    17 
    18 <script>
    19     var sModel = Backbone.Model.extend({
    20         default:{
    21             lastNumber: "04,04,04",
    22             closeTime: "2014-12-01 15:52:09",
    23             "status": "55",
    24             "issue": "141201037"
    25         }
    26     })
    27     var newModel = new sModel();
    28 
    29     $("#sidebar").html(newModel.get("lastNumber"));
    30 </script>

    可以将模版写在<script>中

     1 <script type="text/template" id="post-list-template">
     2     <a href="#post/<%= id %>">
     3         <div class="line">
     4             <%= title %>
     5             <div class="row small-font">
     6                 <div class="span">分类:<%= category %></div>
     7                 <div class="span">发布于:<%= create_time %></div>
     8             </div>
     9         </div>
    10     </a>
    11 </script>
    12 
    13 <script>
    14     var PostView = Backbone.View.extend({
    15         tagName:  "dl",
    16         listTemplate: _.template($('#post-list-template').html())           // _.template方法是underscore.js框架中的方法
    17     })
    18 </script>

    二、Model下的方法


    1、extend():扩展Backbon.Model的方法

    2、clone() 复制模型

      var newModel = itemModel.clone();

    3、isNew() :模型是否保存到了服务器中,如果模型无id视为新模型 itemMode.isNew();

    4、change():手动触发change()事件


    3、default:设置默认的属性值

    1 var InvoiceItemModel = Backbone.Model.extend({
    2     default:{
    3         date: "",
    4         description: "",
    5         price: 0,
    6         quantity: 1
    7     }
    8 })

    4、attributes 属性:也是修改模型属性所用,建议使用set()方法

    三、模型属性的操作

    1、get()方法来获取属性的值

      var quantity = itemModel.get("quantity"); // 如果不存在返回undefined

    2、set()方法来更新、创建单个属性的值

    1 itemModel.set("quantity", 5); // 单个更新,如果通过验证返回true,否则返回false
    2 
    3 itemModel.set({ // 多个更新
    4     quantity: 10,
    5     price: 10
    6 })

    3、unset()删除模型中删除一个属性

      itemModel.unset("quantity"); // 删除一个属性

    4、clear()删除模型中所有的属性

      itemModel.clear();

    5、has()用来检查模型中是否有某一属性

      if(!itemModel.has("quantity")){
        console.log("模型中有此属性");
      }

    6、escape()获得HTML转义后的属性

    var hacker = new Backbone.Model({
      name : "<script>alert('xss')</script>"
    })

    var escaped_name = hacker.escape("name"); // 将转义成&lt;script&gt;alert(&#x27;xss&#x27;)&lt;&#x2f;script&gt

    7、url():返回模型资源在服务器上位置的相对 URL 。 如果模型放在其它地方,可通过合理的逻辑重载该方法

    8、urlRoot 集合外部的模型,通过指定 urlRoot 来设置生成基于模型 id 的 URLs 的默认 url 函数

    1 var Book = Backbone.Model.extend({urlRoot : '/books'});
    2 var solaris = new Book({id: "1083-lem-solaris"});
    3 alert(solaris.url())

    四、模型的标识符操作

    每个模型都有一个ID属性,来在不同杠间进行区分

    1、设置id

      itemModel.id = "model" + Math.random();

    2、获取id

      var modelId = itemModel.id;

    第三章  集合

      backbone用集合来管理多个模型

    一、创建模型的集合

     1 <script>
     2 
     3     // 创建一个模型
     4     var InvoiceItemModel = Backbone.Model.extend({
     5         default: {
     6             descripion:"",
     7             price: 0,
     8             quantity: 1
     9         }
    10     })
    11 
    12     // 方法一:通过模型对象的名来传入
    13     var Collection = Backbone.Collection.extend({
    14         model: InvoiceItemModel
    15     })
    16 
    17     // 方法二:创建一个新的集合,并传入模型的初始化
    18     var invoiceCollection = new InvoiceItemCollection([
    19         {descripion:"Toy House", price: 22, quantity: 3},
    20         {descripion:"Toy House1", price: 23, quantity: 4},
    21         {descripion:"Toy House2", price: 24, quantity: 5},
    22         {descripion:"Toy House3", price: 25, quantity: 6}
    23     ])
    24 </script>

      

    第四章   视图

    一、概念

      视图对象主要用来渲染数据以产生html代码,一个视图可以绑定到DOM中的HTML元素.


    二、渲染视图

      当把数据显示给用户都需要用backbone的视图来进行渲染。

     1 <script>
     2     // 创建一个视图
     3     var v1 = Backbone.View.extend({
     4         el: "#box",
     5 
     6         // 初始化时调用视图
     7         init: function(){
     8             this.html = "woodn toy house"
     9         },
    10 
    11         // 读取视图
    12         render: function(){
    13             $(this.el).html(this.html);
    14         }
    15     })
    16 
    17     // 实例化视图
    18     var oV1 = new v1();
    19     oV1.init();
    20 
    21     // 读取视图
    22     oV1.render();
    23 </script>

    读取模版中的数据

     1 <script>
     2     var m1 = Backbone.Model.extend({
     3         descripion:"Toy House",
     4         price: 22,
     5         quantity: 3
     6     })
     7 
     8     var oM1 = new m1();
     9 
    10     // 创建一个视图
    11     var v1 = Backbone.View.extend({
    12         el: "#box",
    13 
    14         // 读取视图
    15         render: function(){
    16             $(this.el).html("hello " + oM1.descripion + " " + oM1.price + " " + oM1.quantity);
    17         }
    18     })
    19 
    20     // 实例化视图
    21     var oV1 = new v1();
    22 
    23     // 读取视图
    24     oV1.render();
    25 </script>
  • 相关阅读:
    RabbitMQ消息队列———安装(一)
    Tornado之自定义异步非阻塞的服务器和客户端
    爬虫之解析微信的网页版(分析后台,不分析前端)
    阻塞I/O、非阻塞I/O和I/O多路复用
    Git之安装管理
    MongoDB下载以及安装
    Python3学习笔记(十六):随机数模块random
    Python3学习笔记(十五):常用时间模块time和datetime
    Python3学习笔记(十四):可迭代对象、迭代器和生成器
    unittest详解(七) 自动生成测试报告
  • 原文地址:https://www.cnblogs.com/couxiaozi1983/p/4135178.html
Copyright © 2011-2022 走看看