关于backbone.js的优缺点,这里就不详谈了,网上关于这方面的讨论不少了,并且各类框架之因此长久生存,一般都是有其特定优点和擅长点的。javascript
使用backbone.js做为前端框架的应用一般都是html和javascript分离的,也可参考requirejs的结构。html
本文介绍backbone.js的入门教程,经过本篇,读者应该可以比官方API更快和更好的理解基于backbone.js的应用。前端
首先,定义一个html宿主页面:java
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>backbone js test</title> <script type="text/javascript" src="jquery-1.11.1.min.js"></script> <script type="text/javascript" src="jsrender.js"></script> <script type="text/javascript" src="underscore.js"></script> <script type="text/javascript" src="backbone.js"></script> <script type="text/javascript" src="backbone_getting_start.js"></script> </head> <body> <a href="#!/hello">测试route</a> <div id="result"></div> <script type="text/x-jsrender" id="hello-container-template"> <h3>{{:name}},{{:message}}</h3> <div id="btnClick">测试backbone单击事件</div> </script> </body> </html>
其次,在专门的backbone_getting_start.js文件中定义MVC结构,以下:jquery
/** * Created by dell on 2016/11/20. */ var App = { Models: {}, Views: {}, Controllers: {}, Collections: {}, initialize: function() { new App.Controllers.Routes(); Backbone.history.start(); // 要驱动全部的Backbone程序,Backbone.history.start()是必须的。 } }; App.Models.Hello = Backbone.Model.extend({ urlRoot: function() { return '/webend/api.json'; // 得到数据的后台地址,能够是函数或者属性, 随意定义一个api.json便可,见下文 }, initialize: function() { this.set({'message':'hello world'}); // 前端定义一个message字段,name字段由后端提供, 后台若是包含一样字段,会自动覆盖,不然合并。 } }); App.Views.Hello = Backbone.View.extend({ el: "#result", //定义结果view的容器,只要DOM元素(# . element)均可以,通常使用class或者id template: function() { return $.templates("#hello-container-template"); // 返回template,须要是函数 }, events: { "click #btnClick": "btnClick" // 定义this.el内DOM的事件 }, initialize: function(options){ this.options = options; this.bind('change', this.render); this.model = this.options.model; }, render: function(){ // render方法,目标只有两个:填充this.$el,返回this以便链式操做。若是是this.el,则须要el.innerHtml this.$el.html(this.template().render(this.model)); return this; }, btnClick: function() { alert("测试backbone js events功能!"); } }); App.Controllers.Routes = Backbone.Router.extend({ //早期的版本使用Controller,当前版本已经去掉了Controller routes: { "!/hello" : "hello",//使用#!/hello驱动路由 }, hello : function() { //新建一个模型,模型向后端请求更新内容成功后根据模型渲染新页面 var helloModel = new App.Models.Hello(); helloModel.fetch({ success: function(model){ var helloView = new App.Views.Hello({model: model.toJSON()}); //model须要调用toJSON,不然返回值放置在model.attribute helloView.trigger('change'); } }) }}); App.initialize();
定义后台服务,以返回json的静态文件为例web
{"name":"from backend restful api","message":"return from restful api too"}
打开backbone_getting_start.htmljson
点击上述连接,以下:后端
点击"测试backbone单击事件",以下:api