由于公司手机端web的需要,最近开始用上backbone,之前觉得很难学,也一直没看到前端mvc具体是个啥,后来由于项目紧急,就抽空看了一遍underscore和backbone的源码,收获还是蛮大的。

  1. 一个页面可以只有model和view,若后台返回有多条记录,就需要用collection来进行model的管理。
  2. model的id一般都是设置为后台返回的数据唯一的标志,比如mongodb的_id,在model里可以通过idAttribute来设置
  3. 当后台返回的数据不是按照backbone规定的格式时,可以通过model或collection提供的parse函数进行数据的转换
  4. 如果需要用标准的rest api那么model里设置urlRoot属性就可以了,同时collection可以设置url的属性进行批量数据获取,实际发的是get请求
  5. 当定义的url或urlRoot时,在调用model或者collection的save等方法时传入url属性后,与后台交互时优先用传的url值
  6. 在model或者collection调用fetch时,可以配置success和error选项在后台返回数据时进行UI提示,比如,loading提示等。

附js代码:

$(function(){
var globalLoadingObj = $('#globalLoading');
var dialogAlertObj = $('#dialogAlert');
var itemWrapperObj = $('#itemWrapper');
var orderWrapperObj = $('#orderWrapper');
var pageContainerObjs = $('#index').find('.pageContainer');
var itemModel = Backbone.Model.extend({
urlRoot:host+'/1/classes/items',
idAttribute:'_id',
parse:function(response){
return response.results;
}
});
var itemView = Backbone.View.extend({
className:'itemContainer',
template:_.template($('#itemTemplate').html()),
initialize:function(){
this.model.bind('change',this.render,this);
this.model.bind('destroy',this.remove,this);
this.model.fetch({success:function(response,xhr){
hideLoading();
},error:function(){
fetchModelErr();
},
//silent:false,
data:{
limit:1,
skip:0
}})
},
render:function(){
itemWrapperObj.append($(this.el).html(this.template(this.model.toJSON()[0])));
return this;
},
remove:function(){
$(this.el).remove();
return this;
}
});
var initItemModel = new itemModel();
//初始化 itemView
initItemView();
var orderModel = Backbone.Model.extend({
urlRoot:'',
idAttribute:'_id',
parse:function(response){
return response.results;
}
});
var orderView = Backbone.Model.extend({
className:'orderSubContainer'
});
function fetchModelErr(){
var html = '<div class="errTip"><p class="errP"><a href="/static/ctm/index.html">加载失败,点击重试!</a></p></div>';
showDialogAlert(html);
}
function initItemView(){
showLoading();
new itemView({model:initItemModel});
initItemEvent();
initOrderEvent();
}
function initItemEvent(){
itemWrapperObj.on('click','.footer',function(){
var self = $(this);
if(self.hasClass('footer')){
showPage(orderWrapperObj);
}
})
}
function initOrderEvent(){
orderWrapperObj.on('click','.editOrderBtn,.fc_btn',function(){
var self = $(this);
if(self.hasClass('editOrderBtn') || self.hasClass('fc_btn_o')){
showPage(itemWrapperObj);
}
})
}
function showLoading(){
globalLoadingObj.show();
}
function hideLoading(){
globalLoadingObj.hide();
}
function showDialogAlert(html,closeT){
dialogAlertObj.html(html).show();
if(closeT && !isNaN(closeT)){
var closeTimeOut = setTimeout(function(){
hideDialogAlert();
clearTimeout(closeTimeOut);
},closeT*1000);
}
}
function hideDialogAlert(){
dialogAlertObj.hide();
}
function showPage(pageID){
pageContainerObjs.hide();
$(pageID).show();
}
});

附html的template代码:

<script type="text/template" id="itemTemplate">
<h2 class="title"><%= title %></h2>
<div class="itemContent">
<img class = "itemimg" src="<%= pic %>" />
</div>
<div class="priceContainer"><span class="iPrice">¥<%= iPrice %></span><span class="mPrice">¥<%= mPrice %></span><span class="buyN"><%= buyN %>人购买</span></div>
<div class="itemDetailContainer"><span class="text">商品详情(仅剩<%= num %>件)</span></div>
<footer class="footer"><div class="buyBtnWrapper"><i class="iLeft"></i><a href="#" class="buyBtn">立刻抢购</a><i class="iRight"></i></div></footer>
</script>

backbone应用笔记的更多相关文章

  1. Backbone学习笔记一Backbone中的MVC

    原文章地址http://bigdots.github.io/2015/12/01/Backbone学习笔记(一)/#more Backbone.js为复杂WEB应用程序提供模型(models).集合( ...

  2. Backbone基础笔记

    之前做一个iPad的金融项目的时候有用到Backbone,不过当时去的时候项目已经进入UAT测试阶段了,就只是改了改Bug,对Backbone框架算不上深入了解,但要说我一点都不熟悉那倒也不是,我不太 ...

  3. Backbone学习笔记 - View篇

    Backbone是一种Web端的MVC框架,这里纪录学习Model,View和Collection的笔记. 1 View initialize构造函数 Backbone.View 与jQuery库紧密 ...

  4. Backbone 学习笔记

    Backbone 是一款基于模型-视图-控制器 MVC 模式的轻量级javascript 框架 ,可以用来帮助开发人员创建单页Web应用. 借助Backbone 我们可以使用REST的方式来最小化客户 ...

  5. backbone学习笔记一

    backbone是一个MVC单页面框架,针对传统的WEB开发B/S架构的缺点,即通过表现层的浏览器,功能层的WEB服务器,数据层的数据库服务器构架,而操作渲染过程太过复杂.

  6. backbone学习笔记(一)

    因为工作的需要,从今天起对backbone的学习过程做下记录. 学习计划: 1.1周看基本知识(2014/1/18-2014/1/25) 2.基本知识总结(2014/1/26) 3.半周按教程写hel ...

  7. Backbone学习笔记

    model model的get和set是对model.attributes进行操作,并不是直接对model进行操作 collection collection.set()会触发相应的add,remov ...

  8. backbone学习笔记:视图(View)

    Backbone 视图对象主要用来渲染数据,监听事件. Backbone的视图对象可以展示Model数据,也可以把用户编辑的Model数据传递到后台,可以通过监听事件操作视图里的DOM元素 举例: v ...

  9. backbone学习笔记:集合(Collection)

    集合(Collection)是一个Backbone对象,用来组织和管理多个模型,它不仅仅是一个javascript数组,还提供了专门的方法来对集合进行排序.过滤和遍历,集合可以方便的与REST服务器进 ...

  10. backbone学习笔记:模型(Model)(2)属性验证

    Backbone的属性验证有2种方法: 1.Backbone自带简单的验证方法,但是验证规则需要自己实现 通过validate()方法进行验证,验证规则写在此方法里. var RoomModel = ...

随机推荐

  1. Nginx开发HTTP模块入门

    Nginx开发HTTP模块入门 我们以一个最简单的Hello World模块为例,学习Nginx的模块编写.假设我们的模块在nginx配置文件中的指令名称为hello_world,那我们就可以在ngi ...

  2. 【bzoj4176】Lucas的数论 莫比乌斯反演+杜教筛

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i< ...

  3. mysql主从复制数据库

    mysql主从复制相信已经用得很多了,但是由于工作原因一直没怎么用过.趁着这段时间相对空闲,也就自己实现一遍.尽管互联网上已有大把类似的文章,但是自身实现的仍然值得记录. 环境: 主服务器:cento ...

  4. 浅谈HTTP和TCP的理解

    TCP协议对应于传输层,而Http协议对应于应用层,Http协议是建立在TCP协议之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.HTTP会通过TCP建立一个连接通道,当HTT ...

  5. Sample-Code:Translator

    <h2>My Spanish Translator</h2> <p> Enter your text in English:  </p> <p&g ...

  6. js去重方法

    function remove(array){ var obj={}; newarray=[]; for(var i in array){ console.log(i); var arg=array[ ...

  7. YY的GCD 数学

    题目描述 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 kAc这种傻×必然不会了,于 ...

  8. swift pod 第三方库异常的处理

    Xcode8—Swift开发使用Cocoapods引入第三方库异常处理方法 参考:  http://www.jianshu.com/p/23f13be525a0 //podfile文件如下 platf ...

  9. springcloud微服务总结 zuul

    一 springcloud网关组件理解: 为什么需要网关呢? 我们知道我们要进入一个服务本身,很明显我们没有特别好的办法,直接输入IP地址+端口号,我们知道这样的做法很糟糕的,这样的做法大有问题,首先 ...

  10. Eclipse工程部署到Tomcat时出现中文乱码问题

    1.修改Server.xml文件:添加URIEncoding="UTF-8" <?xml version="1.0" encoding="UTF ...