backbone简单学习

0.导包

<script src="jquery-2.0.3.min.js"></script>

underscore-min.js  数据模型操作类

backbone-min.js

1.新建对象

var model = new Backbone.Model();

var models = new Backbone.Collection();

var view = new Backbone.View();

通过无参或有参构造函数创建

2.给对象添加属性

var model = newBackbone.Model();

model.set(‘name‘,‘a‘);//可以接受一个json

model.get(‘name‘);

3.绑定collection

3.将模型放入集合

var model1 = new Backbone.Model({‘name‘:‘hello‘});

var model2 = new Backbone.Model({‘name‘:‘hi‘});

var models = new Backbone.Collection();

models.add(model1);

models.add(model2);

JSON.stringify(models);

4.给构造函数添加实例方法和静态方法

var M = Backbone.Model.extend({

  aaa:function(){  //第一个参数,扩展实例方法

    alert(123);

  },{

  bbb:function(){

    alert(456);

  }

});

var model = new M;

model.aaa();

M.bbb();

5.给构造函数设置默认属性

var M = Backbone.Model.extend({

  defaults:{

    name:‘hello‘

  }

});

var model = new M;

model.get(‘name‘);

6.对象的继承

var M = Backbone.Model.extend({

  aaa:function(){

    alert(123);

  }

});

var ChildM = M.extend();

var model = new ChildM();

model.aaa();

7.自定义事件(为了更好的进行多人开发)

防止函数互相覆盖,事件绑定是不可以覆盖的。

所有事件列表参见Catalog of Events 有14个事件  所有的API:documentcloud.github.io/backbone/#Events-catalog

var M = Backbone.Model.extend({

  defaults:{

    name:‘hello‘

  },

  initialize:function(){//改写初始化函数

    //在初始化的时候添加一个数据变化的事件

    this.on(‘change‘,function(){

      alert(123);

    });

  }

});

var model = new M;

model.set(‘name‘,‘hi‘);

8.自定义事件,制定某一具体数据变化时候调用,和事件的回调参数。

var M = Backbone.Model.extend({

  defaults:{

    name:‘hello‘

  },

  initialize:function(){

    this.on(‘change:name‘,function(model){

      console.log(model);

      //关于model对象中各种属性,详见API。

    });

  }

});

var model = new M;

model.set(‘name‘,‘hi‘);

9.模型和视图绑定

$(function(){

  var M = Backbone.Model.extend({

    defaults:{

      name:‘hello‘

    }

  });

  var V = Backbone.View.extend({

    //视图的初始化方法

    initialize:function(){

      this.listenTo(this.model,‘change‘,this.show);//比on多了一个参数,可以指定操作的元素指向了this.model

    },

    //视图的显示方法

    show:function(model){

      $(‘body‘).append(‘<div>‘+model.get(‘name‘)+‘</div>‘);

    }

  });

  //将视图和模型绑定

  var m = new M;

  var v  = new V({model:m});

  m.set(‘name‘,‘hi‘);

});

10.数据与服务器

//使用Ajax与服务器同步

Backbone.sync = function(method,model){//改写了同步的处理方式

  alert(method + ":"+JSON.stringify(model));

  //结果:mothod 会自动区分是create还是update,这里可以自定义除了ajax的其他提交方式。

  model.id = 1;

};

var M = Backbone.Model.extend({

  defaults:{

    name:‘hello‘

  },

  url :‘/user‘   //指定Ajax同步的url,与服务器交互一定要指定

});

var m = new M;

m.save();//把现在的模型对象保存到服务器上

m.save({name:‘hi‘});//把修改过的数据同步到服务器上

11.Fetch(获取)一个集合的数据。model的Fetch方法

Backbone.sync = function(method,model){

  //Mock提交过程,method为read

};

var C = Backbone.Collection.extend({

  initialize : function(){

    //reset,当获取到服务器数据后触发

    this.on(‘reset‘,function(){

      //在此处进行画面的渲染

      alert(123);

    });

  },

  url:‘/users‘ //获取数据地址

});

var models = new C;

models.fetch();//获取服务器的数据

12.路由与历史管理

在一个页面进行开发,没有跳转,则用Hash值作为每个页面的标记进行历史标记。

如果浏览器支持HTML5 则默认使用html5 的历史栈。

var Workspace = Backbone.Router.extend({

  routes:{

    //用JSON指定对应hash值所执行的函数(hash为help时,执行下面的help方法)

    "help":          "help",  //#help

    "search/:query":       "search",  //#search/kiwis

    "search/:query/p:page": "search" //#search/kiwis/p7

  },

  help:function(){

    alert(1);

  },

  search:function(query,page){

    alert(2);

  }

});

var w = new Workspace;

//开启backbone的历史管理,写了才能后退前进时触发

Backbone.history.start();

13.事件委托

$(function()

  var V = Backbone.View.extend({

    el:$(‘body‘),  //指定事件委托的对象

    events:{

      ‘click input‘:‘aaa‘,  //body中 input对象的click方法触发方法aaa

      ‘mouseover li‘:‘bbb‘

    },

    aaa:function(){

      alert(123);

    },

    bbb:function(){

      alert(456);

    }

  });

  var view = new V;

)

14.前端模板,让JS与视图分离

改写9:9中HTML和JS混在,可以使用underscore中自带的模板

<%=name%>  中添加值

<%_.each(people,function(name){%>    来调用js(很像早期JSP的写法)

<% } %>

<%- value%>  编码,返回处理过后的特殊字符,(翻译&lt)

demo:

<body>

<script type="text/template" id="template">

  <% for(var i=0;i<5;i++){ %>

    <div><%= name %></div>

  <% } %>

</script>

</body>

$(function(){

  var M = Backbone.Model.extend({

    defaults:{

      name:‘hello‘

    }

  });

  var V = Backbone.View.extend({

    //视图的初始化方法

    initialize:function(){

      this.listenTo(this.model,‘change‘,this.show);//比on多了一个参数,可以指定操作的元素指向了this.model

    },

    //视图的显示方法,在这里添加模板

    show:function(model){

      $(‘body‘).append( this.template(this.model.toJSON()));//添加内容是调用模板方法

    },

    template:_.template($(‘#template‘).html())//模板方法是条用underscore库中的_template方法导入ID为template中的html.

  });

  //将视图和模型绑定

  var m = new M;

  var v  = new V({model:m});

  m.set(‘name‘,‘hi‘);

});

json2.js针对IE678解析JSON parse 和 toStingify

backbone.locakStorage.js本地存储,不用AJAX

感谢妙味课堂的初探backbone系列。

时间: 2024-08-13 11:00:09

backbone简单学习的相关文章

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

文章转自: http://segmentfault.com/a/1190000002666658 对于初学backbone.js的同学可以先参考我这篇文章:Backbone.js学习笔记(一) Backbone源码结构 1: (function() { 2: Backbone.Events // 自定义事件 3: Backbone.Model // 模型构造函数和原型扩展 4: Backbone.Collection // 集合构造函数和原型扩展 5: Backbone.Router // 路由

Backbone.js学习之二

经历一段自我修炼,终于领悟到Backbone.js的关键知识点,也发现了原来MVC可以在前端这样梦幻的发挥,Backbone.js确实是一个很有魅力的前端MVC框架. 练就一门技术,需要有扎实的功底,从这点,开始认真研究Backbone.js的一些最基本的操作,以便我日后学习能更上一层楼.那就切入主题: 什么是mvc? 简单的理解就是:模型(models),视图(views),控制器(collections).通过视图把浏览器的网址传给控制器,控制器对网址进行解析,然后去模型层获取数据,模型层将

$.fn.extend简单学习

(function($){ /** 1. $.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效. 如扩展$.fn.abc(),即$.fn.abc()是对jquery扩展了一个abc方法, 那么后面你的每一个jquery实例都可以引用这个方法了.  那么你可以这样子:$("#div").abc();  2.   jQuery为开发插件提拱了两个方法,分别是:  jQuery.extend(object);为扩展jQuery类本身.为类添加新的方法.→

varnish简单学习

操作系统:redhat5.5 前端服务器:varnish cache 2.1.5 监听端口8080 后端服务器:tengine 1.4.6 监听端口80 接着,建立varnish用户以及用户组,并且创建Varnish缓存目录和日志目录:[[email protected] ~]#useradd  -s /sbin/nologin varnish[[email protected] ~]#mkdir /data/varnish/cache[[email protected] ~]#mkdir /d

spring4.0.6最新稳定版新特性学习,简单学习教程(一)

Spring Framework 4.0 学习整理. Spring框架的核心部分就是Ioc容器,而Ioc控制的就是各种Bean,一个Spring项目的水平往往从其XML配置文件内容就能略知一二,很多项目,往往是外包公司的项目,配置文件往往是乱七八糟,抱着能跑就行,不报错就行的态度去写,然后在项目中后期发现各种缺失又去一通乱补,其结果就是,整个文档可读性极差,毫无章法.这也不能怪写这个XML的人,拿着苦逼程序员的工资干着架构师的工作必然是这个结果.为了程序员的幸福,我认为有必要来一套简单快速的官方

JAVA学习Swing章节按钮组件JButton的简单学习

package com.swing; import java.awt.Container; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.URL; import javax.swing.Icon; import javax.swing.ImageIcon;

Backbone简单示例

要的资源: <script type="text/javascript" src="../dep/underscore-1.6.0.min.js"></script> <script type="text/javascript" src="../dep/jquery-1.11.1.min.js"></script> <script type="text/javas

Settings app简单学习记录

Settings是android系统设置的入口.主界面由Settings.java以及settings_headers.xml构成. Settings类继承自PreferenceActivity,而PreferenceActivity又继承自ListActivity,ListActivity拥有ListView和ListAdapter类型的成员变量. 1,如何使用PreferenceActivity构建页面 使用addPreferencesFromIntent或者addPreferencesFr

高内聚低耦合简单学习

起因:模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单, 两个定性的度量标准――耦合性和内聚性. 耦合性也称块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量.模块之间联系越 紧密,其耦合性就越强,模块的独立性则越差.模块间耦合高低取决于模块间接口的复杂性.调用的方 式及传递的信息.   耦合性分类(低――高): 无直接耦合;数据耦合;标记耦合;控制耦合;公共耦合;内容耦合; 1 无直接耦合: 2 数据耦合: 指两个模块之间有调用关系,传递的是简单的数