使用require.js和backbone实现简单单页应用实践
前言
最近的任务是重做公司的触屏版,于是再园子里各种逛,想找个合适的框架做成Web App.看到了叶大(http://www.cnblogs.com/yexiaochai/)对backbone的描述和他做的一个简单框架demo(http://www.cnblogs.com/yexiaochai/p/3837713.html),于是拿来主义,把源码下载了.
项目框架
项目使用VS2012+MYSQL开发,MVC架构,没有叶大那么厉害,只能做做简单应用,下面的做的一个列表和详细页面的JS代码块.
主要JS代码块:
<script type="text/javascript">
var IndexModel = Backbone.Model.extend({});
var IndexList = Backbone.Collection.extend({
model: IndexModel,
parse: function (data) {
return (data && data.data) || {}
},
setComparator: function (type) {
this.comparator = function (item) {
return Math.max(item.attributes[type]);
}
}
});
var Detail = Backbone.View.extend({
el: $("#contents"),
template: _.template($('#detail-template').html()),
events: {
'click #js-return': function () {
this.app.forward('index');
}
},
initialize: function (app) {
this.app = app;
this.render();
},
render: function () {
var scope = this;
var id = this.app.id;
var model = this.app.model;
$.ajax({
url: '@Url.Action("GetContentById", "Home")',
type: 'get',
data: { id: id },
dataType: 'json',
timeout: ,
error: function () { location.href = '/'; },
success: function (data) {
if (data && data.data) {
model.set('value', data.data);
$(".viewport").hide();
$('#viewport_detail').show(); $('#id_viewport_detail').html(scope.template(model.toJSON()));
}
}
});
}
}); var Index = Backbone.View.extend({
el: $('#indexlist'),
template: _.template($('#indexlist-template').html()),
events: {
'click .js_largeimg': function (e) {
var el = $(e.currentTarget);
var index = el.attr('data-index');
var id = el.attr('data-id');
var model = this.list.models[index];
this.app.model = model;
this.app.id = id;
this.app.forward('detail/'+id);
}
},
initialize: function (app) {
this.app = app;
var scope = this;
var curpage = ;
var pageSize = ;
this.list = new IndexList();
this.list.url = '@Url.Action("GetIndexList", "Home")';
this.list.fetch({
success: function () {
scope.render();
}
});
this.listenTo(this.list, 'all', this.render); },
render: function () {
var models = this.list.models;
var html = '';
for (var i = , len = models.length; i < len; i++) {
models[i].index = i;
html += this.template(_.extend(models[i].toJSON(), { index: i }));
}
$(".viewport").hide();
$("#viewport_index").show();
$("#indexlist").html(html);
var s = '';
}
}); var App = Backbone.Router.extend({
routes: {
"": "index", // #index
"index": "index", // #index
"detail/:id": "detail" // #detail
},
index: function () {
var index = new Index(this.interface); },
detail: function (id) {
var detail = new Detail(this.interface);
detail.app.id = id;
},
initialize: function () { },
interface: {
forward: function (url) {
window.location.href = ('#' + url).replace(/^#+/, '#');
}
}
});
var app = new App();
Backbone.history.start();
var s = '';
</script>
实现效果不错,继续努力不断优化ing..........
使用require.js和backbone实现简单单页应用实践的更多相关文章
- 使用 Flask 和 Vue.js 来构建全栈单页应用
在这个教程中,我将向你展示如何将 Vue 的单页面应用和 Flask 后端连接起来. 简单的来说,如果想在 Flask 中使用 Vue 框架是没有什么问题的. 但在实际中存在一个明显的问题就是 Fla ...
- Senna.js – 速度极快的单页应用程序引擎
Senna.js 是一个速度超快的单页应用程序引擎,提供了几个低级别的 API,可以帮助你打造现代化的基于 Web 的应用程序.更重要的是,搜索引擎蜘蛛应该能够索引相同的内容. 通过使用 HTML5 ...
- Node.js + React + MongoDB 实现 TodoList 单页应用
之前用 Ant Design 开发了一个项目,因此对 React 的特性有了一定的了解,React 使用封装组件的思想,组件各自维护自己的状态和 UI, 组件之间通过 props 传递数据和方法.当状 ...
- html5手机Web单页应用实践--起点移动阅读
一开始以hybrid形式做了一个android的小说阅读客户端,叫4G阅读.而后由于业务需求,要迅速实现纯手机html5 版的,所以就直接在原先客户端内内嵌的网页进行改版,快速实现以后在优化的过程中发 ...
- vue-router单页应用简单示例(三)
用vue-resource向服务器请求数据 我们主要来了解一下以下内容: 模拟服务端返回数据 用vue-resource向服务器请求数据 模拟服务器返回数据 我们用vue-cli创建的项目中,已经 ...
- require.js学习笔记(内容属于转载总结)
<script data-main="src/app" src="src/lib/require.js"></script> backb ...
- 【笔记】关于require.js 的用法
最近忙于学校的一个新网站建设,对于以前的前端程序编写方式的不正规特意上网学习了require.js 的用法,使此次的工程更加有条理同时符合当前前端的开发模式——前端模块化. 网上有不少很好的学习文章这 ...
- 用原生js做单页应用
最近在公司接到一个需求,里面有一个三级跳转.类似于选择地址的时候,选择的顺序是:省份->市->区.如果分三个页面跳转,那么体验非常不好,如果引入其他框架做成单页应用,又比较麻烦.所以可以用 ...
- 从单页应用(SPA)到服务器渲染(SSR)
从单页应用(SPA)到服务器渲染(SSR) 情景回顾 在学习Vue开发一个电商网站的管理后台时,使用到了一个组件 vue-quill-editor 主要是一个快捷的一个富文本编辑器 在使用这个组件的组 ...
随机推荐
- Java经典23种设计模式之创造型模式(一)
设计模式被称为程序猿的内功,之前零零散散的看过一大部分,但自己么有总结过.故此次在这里总结下.值得一提的是,设计模式并不是Java所特有.由于一直搞Android.这里就用Java为载体.最经典的设计 ...
- OGEngine教程:声音载入
以下介绍声音资源从载入到播放的一个流程 首先,我们将须要的音频文件放到assets文件夹下,OGE中SoundRes和MusicRes为我们封装了非常多经常使用的方法,能够用于载入及播放等经常使用功能 ...
- H264 Decoder
http://www.cnblogs.com/mcodec/category/213433.html
- ACdream 1135(MST-最小生成树边上2个值,维护第一个最小的前提下让还有一个最小)
F - MST Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitStatu ...
- 管理工具 Kafka Manager
管理工具 Kafka Manager 一.概述 Kafka在雅虎内部被很多团队使用,媒体团队用它做实时分析流水线,可以处理高达20Gbps(压缩数据)的峰值带宽. 为了简化开发者和服务工程师维护K ...
- 自顶向下分析Binder【1】—— Binder实例篇
欢迎转载,转载请注明:http://blog.csdn.net/zhgxhuaa 一个Binder实例 我们Binder的学习将从以下的一个实例開始.依据Android文档中的描写叙述,创建一个Bin ...
- hdu1243(最长公共子序列变形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1243 分析:dp[i][j]表示前i个子弹去炸前j个恐怖分子得到的最大分.其实就是最长公共子序列加每个 ...
- linux下查看日志基本命令
1.cat命令: 功能:1)显示整个文件. 演示样例: $ cat fileName 2)把文件串连接后传到基本输出,如将几个文件合并为一个文件或输出到屏幕. 演示样例: $ cat file1 fi ...
- JS兼容的方式来获取浏览器的宽度
<script type="text/javascript"> //need to wait until onload so body is available win ...
- eclipse 安装vrapper vim插件
http://vrapper.sourceforge.net/update-site/stable 如果安装不上,设置下代理./window/pereference/network* - manul