backbone应用笔记
由于公司手机端web的需要,最近开始用上backbone,之前觉得很难学,也一直没看到前端mvc具体是个啥,后来由于项目紧急,就抽空看了一遍underscore和backbone的源码,收获还是蛮大的。
- 一个页面可以只有model和view,若后台返回有多条记录,就需要用collection来进行model的管理。
- model的id一般都是设置为后台返回的数据唯一的标志,比如mongodb的_id,在model里可以通过idAttribute来设置
- 当后台返回的数据不是按照backbone规定的格式时,可以通过model或collection提供的parse函数进行数据的转换
- 如果需要用标准的rest api那么model里设置urlRoot属性就可以了,同时collection可以设置url的属性进行批量数据获取,实际发的是get请求
- 当定义的url或urlRoot时,在调用model或者collection的save等方法时传入url属性后,与后台交互时优先用传的url值
- 在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应用笔记的更多相关文章
- Backbone学习笔记一Backbone中的MVC
原文章地址http://bigdots.github.io/2015/12/01/Backbone学习笔记(一)/#more Backbone.js为复杂WEB应用程序提供模型(models).集合( ...
- Backbone基础笔记
之前做一个iPad的金融项目的时候有用到Backbone,不过当时去的时候项目已经进入UAT测试阶段了,就只是改了改Bug,对Backbone框架算不上深入了解,但要说我一点都不熟悉那倒也不是,我不太 ...
- Backbone学习笔记 - View篇
Backbone是一种Web端的MVC框架,这里纪录学习Model,View和Collection的笔记. 1 View initialize构造函数 Backbone.View 与jQuery库紧密 ...
- Backbone 学习笔记
Backbone 是一款基于模型-视图-控制器 MVC 模式的轻量级javascript 框架 ,可以用来帮助开发人员创建单页Web应用. 借助Backbone 我们可以使用REST的方式来最小化客户 ...
- backbone学习笔记一
backbone是一个MVC单页面框架,针对传统的WEB开发B/S架构的缺点,即通过表现层的浏览器,功能层的WEB服务器,数据层的数据库服务器构架,而操作渲染过程太过复杂.
- backbone学习笔记(一)
因为工作的需要,从今天起对backbone的学习过程做下记录. 学习计划: 1.1周看基本知识(2014/1/18-2014/1/25) 2.基本知识总结(2014/1/26) 3.半周按教程写hel ...
- Backbone学习笔记
model model的get和set是对model.attributes进行操作,并不是直接对model进行操作 collection collection.set()会触发相应的add,remov ...
- backbone学习笔记:视图(View)
Backbone 视图对象主要用来渲染数据,监听事件. Backbone的视图对象可以展示Model数据,也可以把用户编辑的Model数据传递到后台,可以通过监听事件操作视图里的DOM元素 举例: v ...
- backbone学习笔记:集合(Collection)
集合(Collection)是一个Backbone对象,用来组织和管理多个模型,它不仅仅是一个javascript数组,还提供了专门的方法来对集合进行排序.过滤和遍历,集合可以方便的与REST服务器进 ...
- backbone学习笔记:模型(Model)(2)属性验证
Backbone的属性验证有2种方法: 1.Backbone自带简单的验证方法,但是验证规则需要自己实现 通过validate()方法进行验证,验证规则写在此方法里. var RoomModel = ...
随机推荐
- Sql 不确定列 行转列操作
做项目时,用到了汇总统计的行转列,且 表结构: 具体存储过程脚本如下: -- =============================================-- Author: -- C ...
- Ajax GET
$ajax的post请求提交方式: Controller: @RequestMapping("/emps") @ResponseBody public Msg getEmps(@R ...
- NSSize 尺寸
前言 结构体,这个结构体用来表示事物的宽度和高度. typedef CGSize NSSize; struct CGSize { CGFloat width; CGFloat height; }; t ...
- linux上使用tomcat及查看日志
启动 startup.sh #执行bin/startup.sh #启动tomcatbin/shutdown.sh #停止tomcattail -f logs/catalina.out #看tomcat ...
- HTML5新增的表单元素有哪些?
表单控:color , calendar , date , datetime, datetime-local, time, mouth , week, email, url , search ...
- 流水的算法,铁打的损失函数/MLE
机器学习算法可以说是不少的,如果死记硬背的话,只能当时记得推导过程和步骤,过一段时间就又想不起来了,只能依稀记得一些影子.所以,应该找到算法的一些通用的方法来理解算法的思路以及推导过程. 我认为,最大 ...
- ulimit -n 查看可以打开的最大文件描述符的数量
具体ulimit命令参考 https://www.cnblogs.com/wangkangluo1/archive/2012/06/06/2537677.html
- JDBC_事务概念_ACID特点_隔离级别_提交commit_回滚rollback
事务的概念 一组要么同时执行成功,要么同时执行失败的SQL语句,是数据库操作的一个执行单元! 事务开始于: 连接到数据库上,并执行一条DML语句(insert,update或delete),前一个事务 ...
- 微信小程序之页面之间传递值
页面之间传值有三种方式 1.url传值 2.本地存储传值 3.全局变量传值 1.url传值: 通过url传值的需要通过option来获取参数值. 更多详情可以访问小程序-navigateTo章节. A ...
- C++_基础1-基本数据类型
面向对象(OOP)的本质是设计并扩展自己的数据类型.设计自己的数据类型就是让类型与数据匹配. 如果正确做到这一点,就会发现以后使用数据会容易很多.然而创建自己的类型之前,必须了解并理解C++内置类型. ...