backbone.js学习实例

  着手开始学习

  什么是backbone.js?

  美公的理解是 一种js的mvc的框架,分为Model(模型),View(视图)和Collection(集合),如果有mvc分层开发经验的话,会容易理解。

  为什么学习这个?

  因为用他可以在的单个页面完成多个应用模块,给用户的感觉是不用刷新页面,适合webapp开发

  $(function(){

  var testModel = Backbone.Model.extend({

  defaults:{

  id:"1",

  name:'meigong',

  age:'22'

  }

  });

  var Collection = Backbone.Collection.extend({

  model:testModel

  });

  var ItemView = Backbone.View.extend({

  tagName:'tr',

  template: _.template($('#tpl-item').html()),

  initialize: function(){

  this.model.bind('remove', this.unrender,this);

  this.model.bind('change', this.render,this);

  },

  events: {

  'click a.edit':'editItem',

  'click a.del':'delItem',

  "blur input,select" : "saveItem"

  },

  editItem:function(){

  //获取所有的input

  var input = $(this.el).find('input');

  input.each(function(k,v){

  $(v).removeAttr('disabled');

  });

  },

  delItem:function(){

  //从集合中删除

  app.collection.remove(this.model);

  },

  saveItem:function(){

  alert(2);

  },

  unrender:function(){

  $(this.el).remove();

  },

  render: function() {

  $(this.el).html(this.template(this.model.toJSON()));

  return this;

  }

  });

  var View = Backbone.View.extend({

  el:$('#test'),

  template: _.template($('#tpl-student').html()),

  initialize:function () {

  //this.model.bind("change", this.render, this);

  this.render();

  this.collection = new Collection();

  this.collection.bind('add', this.appendItem,this);

  this.id= 0;

  },

  events: {

  'click #btn':'addItem'

  },

  addItem:function(){

  this.id ++;

  this.testmodel = new testModel();

  this.testmodel.set({

  id:this.id

  });

  //添加到集合中

  this.collection.add(this.testmodel);

  },

  appendItem:function(){

  var itemView = new ItemView({model:this.testmodel});

  $(this.el).append(itemView.render().el);

  },

  render: function(eventName) {

  $(this.el).html(this.template());

  }

  });

  var app = new View();

  });

  开始说明:本例是美公笔记草稿,本地运行没问题,如拷贝代码会缺少文件

  修改的地方

  1.把backone-min.js中的部分修改为create:”POST”,update:”POST”,”delete”:”DELETE”,read:”GET”

  2.服务器端接受 post过来的json数据 $data = json_decode$GLOBALS['HTTP_RAW_POST_DATA']);

  用到的模板

  主文件代码

  $(function(){

  //实例化 index列表

  //index列表的model

  var index_Model = Backbone.Model.extend({

  url:"./get.php", //请求的地址

  });

  //model的集合

  var index_Collection = Backbone.Collection.extend({

  model: index_Model, //集合包含的model层

  url: './get.php' //请求的地址

  });

  //对应的每个元素的view

  var index_list_View = Backbone.View.extend({

  template: _.template($('#tpl-item').html()),

  initialize:function () {

  this.model.bind("change", this.render, this); //在model 执行set,add,destroy时会触发

  },

  events:{ //绑定事件

  'click .bannerImg':'addNum',

  'click .bannerInfo':'comment'

  },

  addNum:function(){

  //单击图片 显示的名字会改变

  this.model.set({ //会触发change事件

  'name':'超姐你好',

  });

  this.model.save(null,{ //发起一个post请求

  url:'http://www.biuman.com/test/before/update2'

  })

  },

  comment:function(){

  var id = this.model.get('id');

  app.navigate("comment/"+id, true); //hash导航url

  },

  render: function() {

  $(this.el).html(this.template(this.model.toJSON()));

  return this;

  }

  });

  //list View 是 index_list_View的集合

  var index_item_View = Backbone.View.extend({

  initialize: function() {

  this.model.bind('reset', this.render, this); //这里的model是个集合 传入的是index_Collection

  var self = this;

  this.model.bind("add", function (item) { // 在 index_Collection 执行add操作会触发 add 或者 发起create请求时也会触发

  $(self.el).append(new index_list_View({model:item}).render().el);

  });

  },

  render: function(eventName) { //渲染

  //这里的model是个集合

  _.each(this.model.models,function(item) {

  $(this.el).append(new index_list_View({model: item}).render().el);

  },

  this);

  return this;

  }

  });

  //发表评论功能

  var comment_add_View = Backbone.View.extend({

  template: _.template($('#tpl-comment').html()),

  initialize:function () {

  this.render();

  },

  events:{

  'click .btn':'addCom',

  },

  addCom:function(){

  var title = $("input[name='title']").val();

  var data = {

  title:title

  }

  //这里必须写app啊

  app.comment_collection.create(data,{

  url:'http://localhost/ci/before/insert2',

  success:function(){

  }

  });

  },

  render: function() {

  $(this.el).html(this.template()); //没有model时 直接写this.template() 。有model要解析model成字符串 用到的是this.model.toJSON()

  return this;

  }

  });

  /***显示评论列表功能 代码解释同上**/

  var comment_Model = Backbone.Model.extend({

  url:"./get.php",

  defaults:{

  title:'',

  }

  });

  var comment_Collection = Backbone.Collection.extend({

  model: comment_Model,

  url: 'http://www.biuman.com/test/before/test'

  });

  var comment_list_View = Backbone.View.extend({

  template: _.template($('#tpl-comment-list').html()),

  initialize:function () {

  this.model.bind("change", this.render, this);

  },

  events:{

  },

  render: function() {

  $(this.el).html(this.template(this.model.toJSON()));

  return this;

  }

  });

  var comment_item_View = Backbone.View.extend({

  initialize: function() {

  this.model.bind('reset', this.render, this); //这里的model是个集合

  var self = this;

  this.model.bind("add", function (item) {

  $(self.el).append(new comment_list_View({model:item}).render().el);

  });

  },

  render: function(eventName) {

  //这里的model是个集合

  _.each(this.model.models,function(item) {

  $(this.el).append(new comment_list_View({model: item}).render().el);

  },

  this);

  return this;

  }

  });

  // Router

  var AppRouter = Backbone.Router.extend({

  routes: {

  "": "list",

  "comment/:id":"comment"

  },

  initialize: function() {

  },

  list: function() {

  if(typeof this.index_collection == 'undefined'){

  this.index_collection = new index_Collection();

  this.index_item_view = new index_item_View({

  model: this.index_collection //传入的index_collection集合

  });

  var self = this;

  this.index_collection.fetch({

  success: function(collection, resp) {

  //console.dir(collection.models);

  }

  }); //fetch先绑定 rest事件

  }else{

  this.index_item_view = new index_item_View({

  model: this.index_collection

  });

  }

  $('#content').html(this.index_item_view.render().el);

  },

  comment:function(id){

  this.comment_collection = new comment_Collection();

  this.comment_item_view = new comment_item_View({

  model: this.comment_collection //传入的集合

  });

  var self = this;

  this.comment_collection.fetch({

  url:'http://www.biuman.com/test/before/test2/'+id,

  success: function(collection, resp) {

  $('#content').append(new comment_add_View().render().el)

  }

  }); //fetch先绑定 rest事件

  $('#content').html(this.comment_item_view.render().el);

  }

  });

  var app = new AppRouter();

  Backbone.history.start();

 

  });

时间: 2024-08-01 01:33:11

backbone.js学习实例的相关文章

Backbone.js框架中Model与Collection的使用实例_基础知识

Model关于backbone,最基础的一个东西就是model,这个东西就像是后端开发中的数据库映射那个model一样,也是数据对象的模型,并且应该是和后端的model有相同的属性(仅是需要通过前端来操作的属性). 下面就从实例来一步一步的带大家来了解backbone的model到底是什么样的一个东西. 首先定义一个html的页面: <!DOCTYPE html> <html> <head> <title>the5fire-backbone-model<

JS学习之表格的排序简单实例_javascript技巧

JS学习之表格的排序简单实例 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <input id="btn1" type="button" value="排序"> <table id="

Backbone.js系列教程十:Backbone.View

在前几节中我们介绍了Backbone基础知识,如果你还没有阅读过,那么我建议你从第一节开始学习--Backbone.js系列教程一:Backbone.js初探,尤其希望你能完全理解构造Backbone对象相 关知识,这对于学习今后的内容有很大帮助.在接下来的几个小节中,我们将深入Backbone,讨论Backbone views.models和collections.相信大家在阅读前文之后,已经对Backbone.View.Backbone.Model. Backbone.Collection构

Javascript MVC框架Backbone.js详解_javascript技巧

随着JavaScript程序变得越来越复杂,往往需要一个团队协作开发,这时代码的模块化和组织规范就变得异常重要了.MVC模式就是代码组织的经典模式. (--MVC介绍.) (1)Model Model表示数据层,也就是程序需要的数据源,通常使用JSON格式表示. (2)View View表示表现层,也就是用户界面,对于网页来说,就是用户看到的网页HTML代码. (3)Controller Controller表示控制层,用来对原始数据(Model)进行加工,传送到View. 由于网页编程不同于客

Backbone.js系列教程一 - Backbone.js简介

JavaScript在web应用程序开发前端技术和后端技术的逻辑与运行一块占有越来越大的比重.为了帮助维护和循环访问前期逻辑和模块性,MVC模式在近几年中渐渐普及.其中一种运用广泛的MVC框架就是Backbone.js. Backbone中的Models(模型).Views(视图)和Controller(控制器) Backbone.js包含以下几个主要功能: 创建模型(以及模型集合): 创建视图: 管理绑定,管理事件兼用不同的模型以及视图与框架其他部分的联系: 在模型中使用观察者模式,一旦模型触

Backbone.js系列教程二:Backbone.js深入解析之基础要求

在网上关于Backbone的描述很少,现有的关于Backbone的内容五花八门,基本上都不同程度的提到了如何运用Backbone来实现应用程序的创建,当然也有很多的是讨论它是否匹配Model/View/Whatever.有挺多华而不实的视频教程是讲程序设计的,但其实没有什么太大的价值.我认为关键是缺少了关于Backbone本身的详细介绍,以及对于每行代码的真正用意的细节描述.有篇文档专门讲述Backbone各部分的功能,在一定程度上解答了上述问题,并且提供带有注释的源代码,还有更多相关Backb

Backbone.js系列教程三:深入解析之框架,模型视图

Backbone下的框架设想 Backbone是用于开发SPA(AKA单页应用)环境.你可能想要知道这些是什么.简单的讲,SPA就是一个加载了一个页面 (index.html或者app.html)的web应用,整个应用通过自定义事件,自定义URL句柄,和异步HTTP检索,存储资源来发送到客户端, 这样避免了页面的重复加载.基本上,SPA框架只加载一个HTML页面,因此JavaScript可以用于仿写/重写/编排浏览器上传统web应用框架的 默认属性. 让我们检验Backbone SPA的框架假设

Backbone.js系列教程六:构造Backbone对象

Backbone构造函数 我之所以说Backbone很简单,是因为Backbone只有四个构造函数能被典型的实例化(基本上,它们首先被继承或子分类).这四种构造函数包括: Backbone.Model = function(attributes, {options}){}; Backbone.Collection = function([models], {options}){}; Backbone.Router = function({options}){}; //只能被具现化一次  Back

Backbone.js系列教程十二:Backbone.Collection

Backbone.Collection概述 一个Backbone集合表示了一组模型逻辑有序的组合,并提供使用(组合,分类,过滤)这些模型组的方法与属性.在本文中为了说明这样的联系关系 (模型=表单中的一行有标签的联系数据),你可以把一个集合看做是整张表单,其中包含了很多行联系数据.下面我更新了表单中联系内容的细节,在上一章节开 头我们讲述过,于是整张表单能够被当作一个联系表单. 当然,一个Backbone.Collection不仅仅是一个像之前表单表现的那种标签.集合还可以捕捉模型以及集合上被触