Backbone快速入门-了解的4个关键概念
4个关键概念, model, collection, view, router:
定义model类,举例:
World = Backbone.Model.extend({
//创建一个World的对象,拥有name属性
name: null
});
定义model collection类, 举例:
Worlds = Backbone.Collection.extend({
//集合对象构造函数
initialize: function (models, options) {
//**Key point 1**: 绑定view的addOneWorld方法到当前worlds集合对象的add动作
//Purpose:当model数据变化时,触发view中的方法,从而可以更新View
this.bind("add", options.view.addOneWorld);
}
});
AppView = Backbone.View.extend({
el: $("body"),
//构造函数
initialize: function () {
//* 绑定Model,实例化一个Model集合类,并且以字典方式传入AppView的对象
this.worlds = new Worlds(null, { view : this });
//* 初始化渲染
this.render();
},
//* 加载模板
render:function(){
//使用underscore这个库,来编译模板
//***Key Point 3: 从当前页面加载模板
var template1=_.template($("#area1_template").html(),{hello:"Hello! You are welcome! "});
//加载模板到对应的el属性中
$("#area1").html(template1);
//从外部文件加载模板
//var template2=_.template($("#area2_template").html(),{footer:"Footer text~~~~"});
//$("#area2").html(template2);
},
//* 事件绑定
events: {
//***Key Point 2: 绑定Dom中id为check的元素
//Purpose:事件对应到代码处理,更新model数据, 从而联系到Key point 1
"click #check": "checkIn",
},
//* 业务处理 (处理Model数据)
checkIn: function () {
var world_name = prompt("请问,您是哪星人?");
if(world_name == "")
world_name = '未知';
var world = new World({ name: world_name });
this.worlds.add(world);
},
//* View更新
addOneWorld: function(model) {
$("#world-list").append("<li>这里是来自<b>" + model.get('name') + "</b>星球的问候:hello world!</li>");
}
});
//实例化AppView
var appview = new AppView();
注: 在View类中一般处理以下事情:
1) 绑定Model (数据)
2) 绑定Model
3) 加载模板
4) 事件绑定
5) 业务处理 (处理Model数据)
6) View更新
7)页面数据的变化同步到服务器端?
Backbone中的router, 有路由的意思,控制相应url的action, 扮演一部分MVC中Controller的角色。Backbone.Router会把你连接中的#标签当做是url路径。
// 3. 定义MVC中的Controller部分 *****
var AppRouter=Backbone.Router.extend({
routes:{
'posts/:id' : 'getPost', //对应的链接为<a href="#/posts/120">Post 120</a>
'download/*path':'downloadFile',//对应的链接为<a href="#/download/user/images/hey.gif">download gif</a>
':route/:action':'loadView', //对应的链接为<a href="#/dashboard/graph">Load Route/Action View</a>
'*actions' : 'defaultRoute'
},
getPost : function(id){
console.log('id=' + id);
alert(id);
},
downloadFile : function(path){
alert(path); // user/images/hey.gif
},
loadView : function(route,action){
alert(route+"_"+action); // dashboard_graph
},
defaultRoute : function(actions){
alert("Default " + actions);
}
});
//实例化AppRouter
var app_router=new AppRouter;
Backbone.history.start();
完整源代码如下:
<!DOCTYPE html>
<html>
<head>
<title>Hill is struggling for his dream! </title>
</head>
<body>
<a href="#/posts/120">Post 120</a>
<a href="#/download/user/images/hey.gif">download gif</a>
<a href="#/dashboard/graph">Load Route/Action View</a>
<div id="area1"></div>
<div id="area2"></div>
<script type="text/template" id="area1_template">
<label><%=hello%></label><br>
<button id="check">报到</button>
<ul id="world-list"></ul>
</script>
<!--<script src="template/area2_template.js"></script>-->
</body>
<script type="text/javascript" src="js/lib/jquery-1.8.2.js"></script>
<script type="text/javascript" src="js/lib/jquery-ui-1.9.0.js"></script>
<script type="text/javascript" src="js/lib/underscore-min-1.3.3.js"></script>
<script type="text/javascript" src="js/lib/backbone-min-0.9.10.js"></script>
<script>
(function ($) {
// 1. 定义MVC中的Mobel部分 *****
World = Backbone.Model.extend({
//创建一个World的对象,拥有name属性
name: null
});
Worlds = Backbone.Collection.extend({
//World对象的集合
initialize: function (models, options) {
//***Key Point 1: 绑定view的addOneWorld方法到当前worlds集合对象的add动作
//Purpose:当model数据变化时,触发view中的方法,从而可以更新View
this.bind("add", options.view.addOneWorld);
}
});
// 2. 定义MVC中的View部分 *****
AppView = Backbone.View.extend({
el: $("body"),
//构造函数
initialize: function () {
//* 绑定Model,实例化一个Model集合类,并且以字典方式传入AppView的对象
this.worlds = new Worlds(null, { view : this });
//* 初始化渲染
this.render();
},
//* 加载模板
render:function(){
//使用underscore这个库,来编译模板
//***Key Point 3: 从当前页面加载模板
var template1=_.template($("#area1_template").html(),{hello:"Hello! You are welcome! "});
//加载模板到对应的el属性中
$("#area1").html(template1);
//从外部文件加载模板
//var template2=_.template($("#area2_template").html(),{footer:"Footer text~~~~"});
//$("#area2").html(template2);
},
//* 事件绑定
events: {
//***Key Point 2: 绑定Dom中id为check的元素
//Purpose:事件对应到代码处理,更新model数据, 从而联系到Key point 1
"click #check": "checkIn",
},
//* 业务处理 (处理Model数据)
checkIn: function () {
var world_name = prompt("请问,您是哪星人?");
if(world_name == "")
world_name = '未知';
var world = new World({ name: world_name });
this.worlds.add(world);
},
//* View更新
addOneWorld: function(model) {
$("#world-list").append("<li>这里是来自<b>" + model.get('name') + "</b>星球的问候:hello world!</li>");
}
});
//实例化AppView
var appview = new AppView();
// 3. 定义MVC中的Controller部分 *****
var AppRouter=Backbone.Router.extend({
routes:{
'posts/:id' : 'getPost', //对应的链接为<a href="#/posts/120">Post 120</a>
'download/*path':'downloadFile',//对应的链接为<a href="#/download/user/images/hey.gif">download gif</a>
':route/:action':'loadView', //对应的链接为<a href="#/dashboard/graph">Load Route/Action View</a>
'*actions' : 'defaultRoute'
},
getPost : function(id){
console.log('id=' + id);
alert(id);
},
downloadFile : function(path){
alert(path); // user/images/hey.gif
},
loadView : function(route,action){
alert(route+"_"+action); // dashboard_graph
},
defaultRoute : function(actions){
alert("Default " + actions);
}
});
//实例化AppRouter
var app_router=new AppRouter;
Backbone.history.start();
})(jQuery);
</script>
</html>
参考:
Backbone: http://backbonejs.org/
http://www.csser.com/tools/backbone/backbone.js.html(中文文档)
Backbone唯一的强依赖库参考 http://underscorejs.org/
分享到:
相关推荐
在这个"backbone-marionette-stickit-example"中,我们看到的是如何将这三个关键组件——Backbone.js、Marionette.js 和 Stickit——集成到一个简单的示例应用中。首先,我们需要了解这三个组件的核心功能: 1. **...
**五、快速入门** 在实际项目中,首先需要创建一个模型,定义其属性和行为。然后,可以创建一个集合,将多个模型实例放入其中。接着,定义一个视图,绑定到相应的模型或集合,实现视图与数据的联动。最后,通过事件...
为了更好地理解 Backbone.js 的基本概念,我们可以从一个简单的 HelloWorld 应用程序开始。在这个例子中,我们将创建一个 Model 来表示“Hello World”消息,然后通过 View 渲染它到页面上。 1. **创建 Model**: ...
该项目应该是一个入门工具包,可以帮助社区基于Backbone.js和Express.js框架构建单页应用程序体系结构。 务实的方法是关键。 可能只是最简单的实现方式,而不是最终确定的应用程序。 它涵盖了前端设计以及开放API的...
**Backbone.js 入门套件详解** Backbone.js 是一个轻量级的JavaScript库,专为构建可扩展、组织良好的前端应用而设计。它提供了一组基础结构和模式,帮助开发者实现MVC(模型-视图-控制器)模式,使得在JavaScript...
《Backbone.js Marionette 入门》是一本专注于JavaScript库Backbone.js的扩展框架Marionette的教程。这本书旨在帮助开发者深入理解如何有效地构建大型、复杂、可维护的单页应用(Single-Page Applications,SPA)。...
首先,`Backbone入门基础.mmap`可能是MindMap或类似的学习工具创建的文件,它可能包含了Backbone.js的基本概念、架构和关键组件的概览。这可能包括: 1. **Model**:Backbone中的核心数据模型,用于存储和管理应用...
这个标题和描述暗示我们正在讨论一个关于Backbone.js的入门教程,Backbone.js是一个轻量级的JavaScript库,主要用于构建可维护性和可扩展性高的前端应用程序。它提供了一种结构化的方式来组织前端代码,包括模型...
- 内容:探讨YOLOv11如何整合CSPNet、PANet等结构来提升特征提取与融合效率,以及如何通过注意力机制(如SAM、CAM)来增强模型对关键特征的识别能力。 3. YOLOv11训练策略与优化 - 核心:讨论YOLOv11的训练方法,...
这是入门Backbone.js的第一步,通常会创建一个简单的实例来展示如何定义模型、视图以及它们之间的交互。 1.2 **Backbone.js核心概念** Backbone.js的核心包括Model、View、Collection和Router四个主要组件,它们...
### 前端工程师核心知识点概览 #### 一、前端工程师的职业发展路径 - **入门阶段**:在这个阶段...通过以上这些核心知识点的学习和实践,前端工程师可以从新手成长为高级工程师,在这个快速发展的行业中保持竞争力。
在深度学习领域,图像分类是一项基础且重要的任务,它涉及到计算机...对于希望入门深度学习的读者来说,这是一个极好的起点,不仅可以理解深度学习的基本流程,还能了解到不同网络架构的优缺点,以及如何优化模型性能。