前言

最近的任务是重做公司的触屏版,于是再园子里各种逛,想找个合适的框架做成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实现简单单页应用实践的更多相关文章

  1. 使用 Flask 和 Vue.js 来构建全栈单页应用

    在这个教程中,我将向你展示如何将 Vue 的单页面应用和 Flask 后端连接起来. 简单的来说,如果想在 Flask 中使用 Vue 框架是没有什么问题的. 但在实际中存在一个明显的问题就是 Fla ...

  2. Senna.js – 速度极快的单页应用程序引擎

    Senna.js 是一个速度超快的单页应用程序引擎,提供了几个低级别的 API,可以帮助你打造现代化的基于 Web 的应用程序.更重要的是,搜索引擎蜘蛛应该能够索引相同的内容. 通过使用 HTML5 ...

  3. Node.js + React + MongoDB 实现 TodoList 单页应用

    之前用 Ant Design 开发了一个项目,因此对 React 的特性有了一定的了解,React 使用封装组件的思想,组件各自维护自己的状态和 UI, 组件之间通过 props 传递数据和方法.当状 ...

  4. html5手机Web单页应用实践--起点移动阅读

    一开始以hybrid形式做了一个android的小说阅读客户端,叫4G阅读.而后由于业务需求,要迅速实现纯手机html5 版的,所以就直接在原先客户端内内嵌的网页进行改版,快速实现以后在优化的过程中发 ...

  5. vue-router单页应用简单示例(三)

    用vue-resource向服务器请求数据 我们主要来了解一下以下内容: 模拟服务端返回数据 用vue-resource向服务器请求数据 模拟服务器返回数据   我们用vue-cli创建的项目中,已经 ...

  6. require.js学习笔记(内容属于转载总结)

    <script data-main="src/app" src="src/lib/require.js"></script> backb ...

  7. 【笔记】关于require.js 的用法

    最近忙于学校的一个新网站建设,对于以前的前端程序编写方式的不正规特意上网学习了require.js 的用法,使此次的工程更加有条理同时符合当前前端的开发模式——前端模块化. 网上有不少很好的学习文章这 ...

  8. 用原生js做单页应用

    最近在公司接到一个需求,里面有一个三级跳转.类似于选择地址的时候,选择的顺序是:省份->市->区.如果分三个页面跳转,那么体验非常不好,如果引入其他框架做成单页应用,又比较麻烦.所以可以用 ...

  9. 从单页应用(SPA)到服务器渲染(SSR)

    从单页应用(SPA)到服务器渲染(SSR) 情景回顾 在学习Vue开发一个电商网站的管理后台时,使用到了一个组件 vue-quill-editor 主要是一个快捷的一个富文本编辑器 在使用这个组件的组 ...

随机推荐

  1. XPSP2 PSDK(还有lostspeed)

    XPSP2 PSDK Full Download with Local Install Use the full download to copy the entire Windows XP SP2 ...

  2. qt+boost::asio+tcp文件传输

    客户端: void qt_boost::pbSendFileClicked(){ QString filename = ui.leFileName->text(); QByteArray ba ...

  3. 【MFC两种视频图像採集方法】DirectShow与Opencv

    效果图: DirectShow採集核心代码: 创建线程调用该函数,採集图像通过x264解码封装rtmp协议包.推送至FMSserver,可实现视频直播 UINT __stdcall StartVide ...

  4. NetAnalyzer2016使用方法

    NetAnalyzer笔记 之 八 NetAnalyzer2016使用方法(2)   [创建时间:2016-05-06 22:07:00] NetAnalyzer下载地址 在写本篇的时候,NetAna ...

  5. codeforces 604B More Cowbell

    题目链接:http://codeforces.com/contest/604/problem/B 题意:n个数字,k个盒子,把n个数放入k个盒子中,每个盒子最多只能放两个数字,问盒子容量的最小值是多少 ...

  6. DRP之Oracle_11g数据库安装

    不知道大家在安装了Oracle数据库的时候有没有这样或那样的困惑,今天这篇文章就把Oracle数据库的安装过程理一下,作为总结,方便以后的学习. 首先,将下载的两个文件放在一个目录下解压,然后打开文件 ...

  7. 给公司部门设计的SOA架构(转)

    新来老大年前开会说:各位同学,公司业务越来越重,未来几年要成倍增长......,我们要梳理出一套新架构,才能更好的支持N万用户.....,以后升职加薪当上....打败..... 想想还有点小激动呢,于 ...

  8. 那些年踩过的坑之:first-child伪类选择器

    原文:那些年踩过的坑之:first-child伪类选择器 :first-child 选择器用于选取属于其父元素的首个子元素的指定选择器.——w3school 嗯,乍一看好像说的不是很明白,因此这个选择 ...

  9. hdu1495(bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 题意:有三个杯子,开始时第一个杯子装满水(体积为a),倒来倒去,得到其中2个杯里的水的体积都为a ...

  10. 采用CXF+spring+restful创建一个web接口项目

    这篇文章是http://blog.csdn.net/zxnlmj/article/details/28880303下面,加入的基础上的restful特征 1.参加restful必jar包裹 jsr31 ...