前言

最近的任务是重做公司的触屏版,于是再园子里各种逛,想找个合适的框架做成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. 关于ubuntu下qt编译显示Cannot connect creator comm socket /tmp/qt_temp.xxx/stub-socket的解决的方法

    今天在ubuntu下安装了qtcreator,准备測试一下能否用.果然一測试就出问题了,简单编写后F5编译在gnome-terminal中出现 Cannot connect creator comm ...

  2. java大数处理

    比较两个数大小 import java.math.*; import java.util.*; public class Main { public static void main(String[] ...

  3. 破解phpjm.net加密,解密程序,全部公布

    原文:破解phpjm.net加密,解密程序,全部公布 2014-05-23更新: 很久没人找我解密了,看来这加密已过时,现公布我这边最新的解密工具. 若有解不出的可联系qq: 267014855 (不 ...

  4. Oschat IM 开源即时通讯项目介绍 - FengJ的个人页面 - 开源中国社区

    Oschat IM 开源即时通讯项目介绍 - FengJ的个人页面 - 开源中国社区 Oschat IM 开源即时通讯项目介绍    255人收藏此文章, 我要收藏 发表于5天前(2013-08-28 ...

  5. Centos 5.5 更新网卡驱动 bnx2 version: 2.0.2

    操作系统:CentOS release 5.5 (Final) 故障现象:网卡无故自动down掉,使用service  network restart 重启后没多久又会自动down , 连接数大概在2 ...

  6. POJ 1742 Coins ( 单调队列解法 )

    id=1742" target="_blank">题目链接~~> 做题感悟:第一次做的时候用的二进制优化.可是没注意到是险过.so也没去看单调队列的解法. 解 ...

  7. CH BR4思考熊(恒等有理式-逆波兰表达式求值)

    恒等有理式 总时限 10s 内存限制 256MB 出题人 fotile96 提交情况 4/43 描述 给定两个有理式f(X)与g(X),判断他们是否恒等(任意A,如果f(A)与g(A)均有定义,那么f ...

  8. (适合入门)JVM堆内存相关的启动参数:年轻一代、岁和永久代内存分配

    假设你要观察JVM进程消耗的堆内存,通过命令工具jmap或可视化工具jvisualvm.exe.JVM这些参数的默认启动值.假设你想知道JVM内存分配策略,最开始手动设置这些参数.通过JDK统计结果, ...

  9. Learning Cocos2d-x for WP8(6)——场景切换和场景过渡效果

    原文:Learning Cocos2d-x for WP8(6)--场景切换和场景过渡效果 C#(wp7)兄弟篇 Learning Cocos2d-x for XNA(6)——场景切换和场景过渡效果 ...

  10. U14Linux的帐号与用户组

    1.在/etc/group和/etc/gshadow中查找mousegroup: grep mousegroup /etc/group /etc/gshadow (grep的使用) 2.其实Linux ...