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 = ...
随机推荐
- C# 根据论文 像素差异算法【个人实验还是比较好使的】
论文地址:http://www.docin.com/p-1081596986.html 具体代码: 我转YUV,再通过上面的论文的方式比较近. YVU 介绍:https://blog.csdn.net ...
- java并发编程(更新)
概念理解:①串行程序②并发程序: 线程安全问题: 同一进程中的所有线程共享进程中的内存地址空间.如果没有明确的同步机制来管理共享数据,那么当一个线程正在使用某个变量时,另一个线程可能同时访问这个变量, ...
- 【转】C# datagridview大小跟随窗口动态改变
源地址:https://blog.csdn.net/fengxing11/article/details/52527715
- TypeScript入门-类
▓▓▓▓▓▓ 大致介绍 在ECMASript6中引入了类这一概念,通过class声明一个类.对于学习过C和C++的人应该不会陌生 ▓▓▓▓▓▓ 类 看一个简单的类: class Greeter { g ...
- Java FileInputStream与FileReader的区别
在解释Java中FileInputStream和FileReader的具体区别之前,我想讲述一下Java中InputStream和Reader的根本差异,以及分别什么时候使用InputStream和R ...
- 基于Solr的多表join查询加速方法
前言 DT时代对平台或商家来说最有价值的就是数据了,在大数据时代数据呈现出数据量大,数据的维度多的特点,用户会使用多维度随意组合条件快速召回数据.数据处理业务场景需要实时性,需要能够快速精准的获得到需 ...
- 谈谈php中抽象类和接口的区别
php中抽象类和接口的区别 1) 概念 面向对象的三大概念:封装,继承,多态 把属性和方法封装起来就是类. 一个类的属性和方法被另外的类复制就是继承,PHP里面的任何类都可以被继承,被继 ...
- 在Pd中取消Code Name 同步
以前记得现在忘记了,好不容易找回来,记住备忘吧.
- js 的常用选择器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【转】Caused by: Action class [com.struts.action.xxxAction] not found 解决方法
刚学习Struts,自己写了个简单程序,一启动tomcat就报错,但是我按着ctrl点击struts.xml中com.struts.action.LoginAction也能定位到LoginAction ...