前面有两篇文章介绍了Backbone的model、collection和view,那么接下来我想用一个完整的Demo来记录我学习的过程,

单页操作,实现数据的增删改,后台使用json做数据库,通过restful模式接口实现增删改操作

backbone的ajax发送的常用请求包括create、put、read、delete对应http的post、update、get、delete

接下来开始吧

服务端的实现就不介绍了,restful路由的定义如下

module.exports = {
get:{
"/": index.homepage, //主页
"/api/models/:size/:index": index.getModels //获取数据集,分页
},
post:{
"/api/model": index.insertModel //保存model
},
put:{
"/api/model/:id": index.updateModel //修改model
},
delete:{
"/api/model/:id": index.delModel //删除model
},
patch: {
"/api/model/:id": index.updateModel //修改model,在save的时候设置patch:true,则执行该路由
}
};

首先把页面html贴出来


长度:<input id="len" type="text" /> 数量:<input id="count" type="text" /> 批次:<input id="batch" type="text" /> 备注:<input id="remark" type="text" /> <input id="btnSave" type="button" value="save" /> <br /><br /></pre>
<table class="listContent" style="border-bottom: 0px;" border="0" cellspacing="1" cellpadding="1">
<tbody>
<tr>
<td class="cbox-td" style="background-color: gainsboro;">选择</td>
<td class="len-td" style="background-color: gainsboro;">总长度(mm)</td>
<td class="useLen-td" style="background-color: gainsboro;">使用长度(mm)</td>
<td class="lastLen-td" style="background-color: gainsboro;">剩余长度(mm)</td>
<td class="flag-td" style="background-color: gainsboro;">是否有效</td>
<td class="batch-td" style="background-color: gainsboro;">批次</td>
<td class="remark-td" style="background-color: gainsboro;">备注</td>
<td class="operate-edit" style="background-color: gainsboro;">修改</td>
<td class="operate-del" style="background-color: gainsboro;">删除</td> </tr> </tbody>
</table>
<table id="listContent" class="listContent" style="margin-top: -1px;" border="0" cellspacing="1" cellpadding="1"></table>
<pre>
<a id="preBtn" href="http://www.cnblogs.com/javascript:;">上一页</a>
&nbsp;&nbsp;&nbsp;
<span id="pageIndex"></span>
&nbsp;&nbsp;&nbsp;
<a id="nextBtn" href="http://www.cnblogs.com/javascript:;">下一页</a>
<script id="listContentTemplate" type="text/html">
<tr>
<td class="cbox-td">
<input type="checkbox" class="check-len" lang="{id}"/>
</td>
<td class="len-td">
<label class="len-label">{len}</label>
<input type="text" class="update-text" />
</td>
<td class="useLen-td">
{useLen}
</td>
<td class="lastLen-td">
{lastLen}
</td>
<td class="flag-td">
{flag}
</td>
<td class="batch-td">
{batch}
</td>
<td class="remark-td">
{remark}
</td>
<td class="operate-edit">
<a href="javascript:;" class="li-update">修改</a>
<a href="javascript:;" class="li-confirm" lang="{id}" style="display: none;">确定</a>
&nbsp;
<a href="javascript:;" class="li-cancel" style="display: none;">取消</a>
</td>
<td class="operate-del">
<a href="javascript:;" class="li-del" lang="{id}">删除</a>
</td>
</td>
</script>

上面的html代码就不用分析了

有实现功能可看出Model包含长度、批次、备注、使用长度、剩余长度、是否可用等属性

首先我们做的就是定义Model对象,代码如下

var Model = Backbone.Model.extend({
urlRoot: "/api/model",
initialize: function () {
this.bind("change", function () {
});
this.bind("invalid", function (model, error) {
if (error) {
alert(error);
}
});
},
defaults: {
id: null,
len: 0,
useLen: 0,
lastLen: 0,
flag: true,
batch:0,
remark: "",
createTime: Date.now()
},
validate: function (attributes) {
if (attributes.len <= 0 || attributes.len == "") {
return "长度输入不合理";
}
}
});

代码分析:

首先看看urlRoot,model包括url和urlRoot两个用来与服务器进行通讯的路由地址,在model没有和Collection一块使用的时候则用url,若model和collection一块使用则使用urlRoot。

在initialize构造方法中绑定了两个方法,change:属性被改变时触发,invalid:验证属性时触发。

defaults:定义mode的属性

validate:验证字段的合法性

好咯model定义完成,但是我们要去数据集合,所有就要配合collection使用,下面定义一个Collection对象

    var Models = Backbone.Collection.extend({
model: Model,
initialize: function () {}
});

代码分析:

很简单的一个Collection集合,用来保存model,通过model来指定使用的Model对象

initialize:同样是构造方法

这样Model就和Collection关联起来了,那么数据选择就要再view(视图)中完成了,

view的作用就是要完成所有页面执行事件,取数据集合、保存事件、修改事件、删除事件、分页事件等

那么接下来定义view

var ModelView = Backbone.View.extend({
el: $("body"), //控制模块
size: 30, //分页
index: 0, //页码
sumCount: 0, //
allowNext: true, //是否允许下一页执行
initialize: function () {
  this.models = new Models();
  this.uiList = $("#listContent");
  this.render();
},
render: function () {
  //初始化加载
},
events: {//绑定事件
  "click #btnSave": "save",
  "click .li-del": "del",
  "click .li-update": "update",
  "click .li-confirm": "confirmUpdate",
  "click .li-cancel": "cancel",
  "click #preBtn": "prePage",
  "click #nextBtn": "nextPage"
},
save: function () {
  //保存事件,保存的时候是没有id的,所有会执行Model中的urlRoot路由
},
del: function (event) {
       //删除事件
},
update: function(event){
  //修改,弹出确认框,真正修改在confirmUpdate方法中
},
confirmUpdate: function(event){
       //真正修改,方法请求
},
initListContent: function (collection) {
  //装载数据到页面
},
prePage: function(event){
  //上一页
},
nextPage: function(event){
  //下一页
},
setPageIndexToSpan: function(){
  //显示当前页码
}
);

上面是View的定义,包括需要的事件定义,

后面会一一实现view中的这些事件 下篇再接着写.........................

实例学习Backbone.js(一)的更多相关文章

  1. MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录

    注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是 ...

  2. Backbone.js应用基础

    前言: Backbone.js是一款JavaScript MVC应用框架,强制依赖于一个实用型js库underscore.js,非强制依赖于jquery:其主要组件有模型,视图,集合,路由:与后台的交 ...

  3. 我对Backbone.js的一些认识

    backbone.js已经不是当前最流行的前端框架了,但是对于我而言,依然具有比较好的学习价值.虽然目前来说,react,vue等mvvm框架非常火热,但是感觉自身还不到去使用这种框架的层次.这些技术 ...

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

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

  5. 前端mvc框架backbone.js入门[转]

    原文地址:http://www.cnblogs.com/zhjh256/p/6083618.html 关于backbone.js的优缺点,这里就不详谈了,网上关于这方面的讨论很多了,而且各种框架之所以 ...

  6. Backbone.js

    Backbone.js是一套JavaScript框架與RESTful JSON的應用程式介面.也是一套大致上符合MVC架構的編程範型.Backbone.js以輕量為特色,只需依賴一套Javascrip ...

  7. 用Backbone.js教程系列的链接

    整理了一下用Backbone.js系列教程链接. Backbone.js入门教程 用Backbone.js创建一个联系人管理系统(一) 用Backbone.js创建一个联系人管理系统(二) 用Back ...

  8. 用Backbone.js创建一个联系人管理系统(五)

    原文: Build a Contacts Manager Using Backbone.js: Part 5 这是这系列教程最后一部分了. 之前所有的增删改都在前端完成. 这部分我们要把Contact ...

  9. 用Backbone.js创建一个联系人管理系统(四)

    原文: Build a Contacts Manager Using Backbone.js: Part 4 这一系列教程的第四部分,教我们如何完成对已经存在的Contacts进行编辑和保存. 本教程 ...

随机推荐

  1. RegexKit: A Regular Expression Toolbox Based On NW.js(Node-Webkit) And Other Greate Open Source Projects.

    RegexKit RegexKit: A Regular Expression Toolbox Based On NW.js(Node-Webkit) And Other Greate Open So ...

  2. 微软BI 之SSIS 系列 - 2008 版本中变量 Int64 无法保存 bigint 类型数据的BUG

    开篇介绍 这是今天在帮别人看一个 2008R2 版本的项目时发现的一个 Bug,这个 Bug 在 SQL SERVER 2012 有的版本中可能已经解决,但在论坛上看到有的仍然存在. 在 SQL SE ...

  3. dip的全称

    dip的全称是Density-independent pixel,密度无关像素.很多地方误认为是device independent pixel,即设备无关像素.这是错误的. 因为dip也就是dp只能 ...

  4. 为什么不能把委托(delegate)放在一个接口(interface)当中?

    stackoverflow上有人问,为什么不能把委托放在一个接口当中? 投票最多的第一个答案第一句话说,“A Delegate is just another type, so you don't g ...

  5. mysql 5.6.17 x64 安装

    下载地址 百度网盘地址:http://pan.baidu.com/share/link?shareid=1895747668&uk=3257050114&fid=234538452 官 ...

  6. 15个专业版响应式WordPress主题

    当你准备创建一个新的网站,你会发现有很多的WordPress主题供你选择,它们强大而且合适.虽然大量的第三方插件可以解决脚本的问题,但这次我们要向你介绍一些完全不同于以往的主题,它们都是专业开发者开发 ...

  7. atitit.软件开发方法总结O6

    atitit.软件开发方法总结O6 #--cmm/cmmi  都晓得这个. #--IPD集成产品开发 结构化的流程 IPD工具:包括业务及技术上的共工具. 5.考评:包括团队和个人绩效考核两个方面:首 ...

  8. jQuery实现Checkbox中项目开发全选全不选的使用

    <html> <head> <meta charset="utf-8"> <title>Checkbox的练习</title& ...

  9. 15系统函数&数据类型转换(必学)-大话数据库视频教程

    大纲:系统函数的用法,case...when的用法,cast关键字的用法,convert的用法 优酷超清地址: 腾讯超清地址: 百度网盘下载地址:http://pan.baidu.com/s/1dDe ...

  10. [推荐]WebService开发知识介绍

    [推荐]WebService开发知识介绍 WebService开发手册  http://wenku.baidu.com/view/df3992ce050876323112128a.html WebSe ...