前端javascript框架之BackboneJS学习笔记

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script>
<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script>
<script src="http://documentcloud.github.com/backbone/backbone-min.js"></script>
<title>the5fire.com-backbone.js-Hello World</title>
</head>
<body>

/* 案例1 */
<button id="check">报到</button>
<ul id="world-list">
</ul>

<script>
(function ($) {
World = Backbone.Model.extend({
//创建一个World的对象,拥有name属性
name: null
});

Worlds = Backbone.Collection.extend({
//World对象的集合
initialize: function (models, options) {
this.bind("add", options.view.addOneWorld);
}
});

AppView = Backbone.View.extend({
el: $("body"),
initialize: function () {
//构造函数,实例化一个World集合类,并且以字典方式传入AppView的对象
this.worlds = new Worlds(null, { view : this })
},
events: {
"click #check": "checkIn", //事件绑定,绑定Dom中id为check的元素
},
checkIn: function () {
var world_name = prompt("请问,您是哪星人?");
if(world_name == "") world_name = ‘未知‘;
var world = new World({ name: world_name });
this.worlds.add(world);
},
addOneWorld: function(model) {
$("#world-list").append("<li>这里是来自 <b>" + model.get(‘name‘) + "</b> 星球的问候:hello world!</li>");
}
});
//实例化AppView
var appview = new AppView;
})(jQuery);
</script>

<!-- 案例2- model
<div id="test2">man</div>
<script>
(function($){
Man = Backbone.Model.extend({
url:‘/save/‘,
initialize:function(){
alert("Hey, you create me!");
//初始化时绑定监听事件
this.bind("change:name",function(){
var name = this.get(‘name‘);
alert("你改变了name属性为": + name);
});
//错误提示
this.bind("error",function(model,error){
alert(error);
})
},
defaults:{
name:‘张三‘,
age:‘38‘
},
//验证规则
validate:function(attributes){
if(attributes.name == ""){
return "name不能为空";
}
}

aboutMe:function(){
return ‘我叫‘ + this.get(‘name‘) + ‘,今年‘ + this.get(‘age‘) + ‘岁‘;
}

});
var man = new Man;
alert(man.get(‘name‘));
alert(man.aboutMe());
man.set({mane:‘山姆‘}); //触发绑定的change事件,
man.set({mane:‘‘});
man.save();
var man1 = new Man;
man1.fetch({url:‘/getmans/‘});
})(jquery);
</script>
-->
<!-- 案例3- collection
<script>
(function($){
Book = Back.Model.extend({
default:{
title:‘default‘
},
initialize:function(){
alert("Hey,you create me!");
}
});

BookShelf = Back.Collection.extend({
model:Book
});
var book1 = new Book({title:‘book1‘});
var book2 = new Book({title:‘book2‘});
var book2 = new Book({title:‘book3‘});

var bookShelf = new BookShelf([book1,book2,book3]); //这里用的是数组,也可以用add
var bookShelf = new BookShelf;
bookShelf.add(book1);
bookShelf.add(book2);
bookShelf.add(book3);
bookShelf.remove(book3);

/*for(var i=0; i<bookShelf.models.length; i++){
alert(bookShelf.models[i].get(‘title‘));
}*/

//基于underscore这个JS库,还可以使用each的方法猎取collection中的数据,
bookShelf.each(function(book){
alert(book.get(‘title‘));
});

bookShelf.fetch({‘/getbooks/‘,success:function(collection,response){
collection.each(function(book){
alert(book.get(‘title‘));
});
},error:function(){
alert("error");
}
});

})(jQuery);
</script>
-->

<!--
<script>
//backbone model
Man = Backbone.Model.extend({
initialize:function(){
alert("Hey,you create me");
this.bind(‘change:name‘,function(){
var name = this.get(‘name‘);
alert(‘你改变了name属性为:‘ + name);
});
this.bind("error",function (model,error){
alert(error);
});
},
defaults:{
name:"张三",
age:‘20‘
},
validate:function(attributes){
if(attributes.name == ‘‘){
return ‘name不能为空‘;
}
},
aboutMe:function(){
return ‘我叫‘ + this.get(‘name‘) + ‘,今年‘ + this.get(‘age‘);
}
})
var man = new Man();
man.initialize();
alert(man.aboutMe());
alert(man.get(‘name‘));
man.set({name:‘大棒‘,age:‘20‘});
alert(man.get(‘name‘)+man.get(‘age‘));
man.set({name:‘‘});
man.save();
alert(man.validationError);
</script>
-->

<!--
<script>
//backbone collection
Book = Backbone.Model.extend({
default:{
title:‘张三‘
},
initialize:function(){
alert(‘Hey111!‘);
}
});
BookShelf = Backbone.Collection.extend({
model:Book
});
var book1 = new Book({title:‘book1‘});
var book2 = new Book({title:‘book2‘});
var book3 = new Book({title:‘book3‘});
//alert(book3.get(‘title‘));
var bookShelf = new BookShelf();
bookShelf.add(book1);
bookShelf.add(book2);
bookShelf.add(book3);
alert(bookShelf.models[2].get(‘title‘)); //输出单一元素
bookShelf.remove(book3);
bookShelf.each(function(book){
alert(book.get(‘title‘)); //遍历出所有元素
});
for(var i=0; i<bookShelf.models.length; i++){
alert(bookShelf.models[i].get(‘title‘));
}
</script>
-->

<!--
<script>
//backbone router
var AppRouter = Backbone.Router.extend({
routes:{
"*actions":"defaultRoute"
},
defaultRoute:function(actions){
alert(actions);
}
});
var app_router = new AppRouter();
Backbone.history.start();
</script>
<a href="#actions1">testActions</a>
-->

<div title="列表" style="color:red" id="list" class="listview"></div>
<!--
<script type="text/javascript">
var ListView = Backbone.View.extend({
tagName : ‘div‘,
className : ‘listview‘,
id : ‘list‘,
attributes : {
title : ‘列表‘,
style : ‘color:red‘
},
render : function() {
this.el.innerHTML = ‘Hello World!‘;
document.body.appendChild(this.el);
}
});
var listview = new ListView();
listview.render();
</script>
-->
<!--
<script>
var SearchView = Backbone.View.extend({
el : ‘#list‘,
initialize: function(){
//this.render();
},
render: function() {
this.el.innerHTML = ‘Hello World!‘;
//document.body.appendChild(this.el);
}
});
var searchView = new SearchView();
searchView.render();
</script>
-->

<div id="search_container"></div>

<script type="text/template" id="search_template">
<label><%= search_label %></label>
<input type="text" id="search_input" />
<input type="button" id="search_button" value="Search" />
</script>
<script>
jQuery(document).ready(function(){
SearchView = Backbone.View.extend({
el:"#search_container",
initialize: function(){
//this.render();
},
render: function() {
//使用underscore这个库,来编译模板
var template = _.template($("#search_template").html(),{});
//加载模板到对应的el属性中
this.el.html(template);
}
});
var searchView = new SearchView({el: $("#search_container")});
searchView.render();
})
</script>
</body>
</html>

时间: 2025-01-12 16:28:02

前端javascript框架之BackboneJS学习笔记的相关文章

backbonejs学习笔记

Backbone是一个轻量级的前端MVC框架,用于结构化管理页面中的大量JS,建立与服务器.视图间的无缝连接,为构建复杂的应用提供基础框架.最适合的应用场景是单页面应用,并且页面上有大量数据模型,模型之间需要进行复杂的信息沟通.backbone所依赖的underscore类库提供了60多个函数用于处理数组操作.函数绑定以及javascript模板机制. 在Backbone中,DOM选择器.DOM事件和AJAX,都使用了jQuery的方法.如果不想使用jQuery或Zepto,而是使用其它的.或自

《Javascript权威指南》学习笔记之十一:处理字符串---String类和正则表达式

一.正则表达式的基本语法 1.概念:正则表达式由普通字符和特殊字符(元字符)组成的文本模式,该模式描述在查找字符串主体时待匹配的一个或者多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 普通字符包括所有的大小写字母字符.所有数字.所有标点符号及一些特殊符号.普通字符本身可以组成一个正则表达式,也可以和元字符组合组成一个正则表达式:而元字符则具有特殊的含义,包括().[].{}./.^.$.*.+.?...|.-.?:.?=.?! 2.基本语法 3.优先权含义 二.使用

Node.js笔记(0003)---Express框架Router模块学习笔记

这段时间一直有在看Express框架的API,最近刚看到Router,以下是我认为需要注意的地方: Router模块中有一个param方法,刚开始看得有点模糊,官网大概是这么描述的: Map logic to route parameters. 大概意思就是路由参数的映射逻辑 这个可能一时半会也不明白其作用,尤其是不知道get和param的执行顺序 再看看源码里面的介绍: Map the given param placeholder `name`(s) to the given callbac

《JavaScript权威指南》学习笔记之二十---XMLHttpRequest和AJAX解决方案

一.AJAX概述 AJAX是Asynchronous JavaScript and XML的缩写,中文译作异步JavaScript和XML.AJAX 不是新的编程语言,而是一种使用现有标准的新方法,在不重新加载页面的情况下,与服务器交换数据并更新部分网页的艺术.其核心是:客户端的Javascript能够与web服务器进行异步数据交换. 二.AJAX基础---XMLHttpRequest对象 所有现代浏览器(IE7+.Firefox.Chrome.Safari 以及 Opera)均内建 XMLHt

《Javascript权威指南》学习笔记之十六:BOM之源---BOM基本应用

BOM的基本应用包括:管理浏览器历史.解析地址和获取浏览器信息,本文将介绍这些应用. 一.浏览历史管理 1.history对象的方法和属性 History 对象包含用户(在浏览器窗口中)访问过的 URL,是 window 对象的一部分,可通过 window.history 属性对其进行访问.没有应用于 History 对象的公开标准,不过所有浏览器都支持该对象. length属性:返回浏览器历史列表中的URl数量.是"前进"和"后退"两个按钮之下包含的地址数的总和.

《Javascript权威指南》学习笔记之十九--HTML5 DOM新标准---处理文档元信息和管理交互能力

一.了解DOM 1.DOM是Document Object Model的缩写,即文档对象类型,是文档在内存中的表示形式,是一个应用程序接口,定义了文档的逻辑结构以及一套访问和处理文档的方法. 2.HTML DOM与Core DOM的区别:前者提供了大量的方法和属性,与现有的程序模型一致,更便于脚本的编写者控制. 二.document对象 使用window.document属性返回一个document对象,代表当前window内加载的文档.window可以省略.winName.document返回

《Javascript权威指南》学习笔记之十八:BOM新成就(1)--客户端存储数据(Web SQL DataBase实现)

使用本地存储和会话存储可以实现简单的对象持久化,可以对简单的键值对或对象进行存储.但是,对于比较复杂的关系数据进行处理时,就要用Web SQL Database.浏览器对Web SQL Database的支持情况如图: 一.如何使用Web SQL Database <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-t

《Javascript权威指南》学习笔记之十二:数组、多维数组和符合数组(哈希映射)

Array(数组)是JavaScript中较为复杂的数据类型,同Java.C#.VB等程序语言的数组相比,Javascript数组中的元素不必为相同的数据类型,可以在数组每个元素上混合使用数字.日期.字符串.Object,甚至添加一个嵌套数组. 一.创建数组 1.var arr1 = new Array(); /var  arr2 = new Array(length); /var arr3 = new Array(element1,element2...); var arr4 = [eleme

《Javascript权威指南》学习笔记之十三:处理日期和时间

一.创建Date实例 1.Date类的方法和属性很多不是静态的,因此,在应用Date类的属性和方法之前,必须创建Date类的实例. var date = new Date();  //以当前日期和时间创建实例. var date = new Date(value);  //value是必选项,如果是数值,value表示指定日期与1970.1.1午夜之间的毫秒数:如果是字符串,value则按照parse()方法中的规则进行解析.全局的Date()函数完成与new Date(value)相同的功能