backbone-mobile

高性能移动 webapp 框架
授权协议 GPL
开发语言 JavaScript
所属分类 手机/移动开发、 手机Web开发框架
软件类型 开源软件
地区 国产
投 递 者 胡墨竹
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

backbone-mobile 是工程化构建高性能移动 webAPP 项目骨架。使用backbone、requirejs、amazeui等项目构建

本项目解决的问题:

  1. 足够好的性能

  2. 多人协同开发和统一的开发方式

  3. 包管理和打包发布

  4. 可维护性

  5. 集成UI套件以及页面过渡动画

  6. 资源按需加载和预加载

demo 预览

http://linksgo2011.github.io/backbone-mobile/

为什么需要 backbone-mobile

自己从事纯前端工作一年多而已,但是却遇到了很多的webapp项目需求。尝试过使用很多框架以及现成的解决方案,这些方案非常不错,但是对于自己项目来说借鉴意义大于拿来自己用。我把学习过的相关项目罗列出来细说12

1、https://github.com/zhangxinxu/mobilebone 张鑫旭大牛的过渡动画骨架。这个是最先吸引我的一个东西,理念很好但是并没有用于项目。原因是这个项目重点在于过场动画以及切换方式,需要配合其他框架使用,需要添加路由、包管理、模型、控制器等等。还有一个项目官网http://www.mobilebone.org/

2、blade 叶小钗的blade框架。也有过渡动画效果,加入了requirejs,比较有特色的地方是使用了web组件。对于小型小项目还是够用,带有简单的UI,同样需要路由、包管理、模型、控制器等特性。

3、ionic 框架。非常强大的框架。使用angularjs作为路由、控制器、模型的实现。带有一套全面的UI框架,同时可以打包成APP,非常方便。不好的地方就是需要学习angularjs,这个问题不是太大,angular在移动端有个致命的问题,就是双向绑定造成的性能低下。同时也需要抛弃jquery生态系统。

4、Jingle 和blade类似,也是比较完善的框架,同样存在无法工程化的问题。

backbone-mobile 工程化思路

使用backbone + require 做项目骨架,拓展出controller 划分 controller、model、view、templetes目录来进行协作开发。

如何使用

首先我们说下目录项目的目录结构及其功能

├─css
├─fonts
├─img
└─js
    ├─controller       控制相关代码
    ├─lib              依赖的第三方库
    │  ├─backbone
    │  │  └─plugins
    │  ├─jquery
    │  │  └─plugins
    │  ├─modernizr
    │  ├─require
    │  │  └─plugins
    │  ├─underscore
    │  └─vsf
    │      ├─log
    │      └─store
    ├─template      模板文件,默认使用的html
    │  ├─Layzload   每个控制器推荐对应一个目录
    │  ├─Pages
    │  └─Preload
    └─view          视图目录

可以看出我们依赖 backbone、requirejs 因此需要学习相关文档

下载本项目

 git clone https://github.com/linksgo2011/backbone-mobile.git

需要将项目放到web服务器目录下,这里约定使用web根目录,在编辑器中打开后,我们来说明如何开始开发。我们想增加一个 http://localhost/#/Users/update/9 页面。我们需要怎么做呢?

在我们的项目中拓展backbone 增加了路由中的controller以及,因此约定路由 按照

    #/controller/action/params

格式来书写。

在template 目录下创建 Users 目录,添加一个 update.html 模板文件

 <div class="page" id="users-update-page" >
    这是更新user的模板
 </div>

为了展示页面过场效果,最外层div标签必须按照这个格式书写,并且每个html页面的ID全局唯一,避免页面切换时冲突

接下来,我们在controller 目录下创建 UsersController.js

/**
 */
define(
    [
        'jquery',
        'underscore',
        'backbone',
        'controller/MobileController',
        'view/BaseMobileView',
        'ui',
        'text!../template/Users/update.html'
    ],
    function($, _, Backbone, MobileController, BaseMobileView, ui, update) {
        return MobileController.extend({
            // 批量初始化
            initialize: function() {
                var views = {
                    updateView: update
                };
                $.each(views, $.proxy(function(key,tpl){
                    this[key] = new BaseMobileView({
                        $container: $('body'),
                        appendable: true,
                        controller: this,
                        textTemplate: tpl
                    });
                },this));
            },
            update: function() {
                // TODO



            this.updateView.render({});

            // 给页面绑定自己的事件,因为每次render都会重新渲染页面,不必担心事件重复
            this.updateView.$el.on("click", function(event) {
                $.alert("你点击了页面!");
            });

        },
    });
}



);

这样路由中的controller对应这文件,而第二段对应了文件中的update方法,当url第一次被请求时,控制器的initialize 方法会被执行。  然后每次请求都会执行update方法。

我们可以在init方法中初始化view,然后在update方法中编写我们的业务逻辑

这样你就可以根据路由划分功能和业务逻辑,更好的协作开发了。如果做过后端开发例如PHP、JAVA MVC相关的应该会很快理解这样编写代码的好处。

# 项目打包

使用requirejs开发的项目可以直接被打包成一个文件,提高加载效率,使用非常方便,项目根目录下放置了一个gruntfile文件,可以阅读该文件,使用nodejs相关模块打包即可。

# 配合后端API

移步 nodecms 项目

#最后说几句

这个项目不算自己完成,只能算是整合网络上一些代码然后修改整理了并在实际项目中使用过。 下面我罗列出项目中使用的代码来源

  1. backbone 

  2. controller 

  3. jquery

  4. unnderscore 

  5. require

  6. amazeui

疏漏之处请指正,谢谢!

  • Model集合,Collection,用法类似java中的ArrayList。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>index.html</title> <link

  • 视图对象类似与与<TextView/>对应的TextView对象,每个视图对象都对应一个dom元素。 我们在定义视图对象的时候,可以指定dom对象,存储在视图对象的el属性中,如果不指定,backbone.js会自动生成一个空的div元素赋值给el。 下面一个例子实现点击按钮改变div中文字的功能,展示一下视图对象如何使用: <!DOCTYPE html> <html> <head> <met

  • 不论是定义模型还是视图等等,我们都相当于构造了一个类,在创建这个类的对象时,我们可以显示定义这个类的构造方法。 <link rel="stylesheet" href="../jquery.mobile-1.0.1.min.css" /> <script type="text/javascript" charset="utf-8" src="../jquery.js"></script> <

  • 整理如下(按照arxiv上面时间线的预印版本来整理): Backbone(基础网络,也可以理解为分类网络): Backbone可以塞入UNET作为使用。   年代 网络名称与代码 论文名称 1989 LeNet Backpropagation Applied to Handwritten Zip Code Recognition 1995 LeNet4, Boosted LeNet4, LeNet

 相关资料
  • 对诸如硬盘之类的标准计算机硬件的取证调查和分析已经发展成为一种稳定的学科,并且借助于分析非标准硬件或瞬时证据的技术。 尽管智能手机越来越多地用于数字调查,但它们仍然被认为是非标准的。 法医分析 法医调查从智能手机中搜索接收的电话或拨打的号码等数据。 它可以包括短信,照片或任何其他有罪证据。 大多数智能手机都具有使用密码或字母数字字符的屏幕锁定功能。 在这里,我们将举例说明Python如何帮助破解屏

  • 概况 背景 看到项目上的移动框架,网上寻找了一下,发现原来这些一开始都有。于是,找了个示例开始构建一个移动平台的CMS——墨颀 CMS,方便项目深入理解的同时,也可以自己维护一个CMS系统。 Showcase GitHub: http://github.com/phodal/moqi.mobi Demo: 墨颀 CMS jQuery + Backbone + UnderScore + Requir

  • Uragano 旨在提供一个搭建和使用简单的高性能 RPC 框架。Uragano 是基于 netstandard2.0 开发的。Uragano 默认采用 DotNetty 实现远程通信,使用 MessagePack 进行编解码。

  • 对于移动测试,有几个网络连接选项: 实际移动网络具有实际载体 WiFi没有流量整形 WiFi具有固定的流量整形配置文件 WiFi具有每个测试流量整形 流量整形(traffic shaping)典型作用是限制流出某一网络的某一连接的流量与突发,使这类报文以比较均匀的速度向外发送。 移动测试网络对于WebPagetest的公共实例来说是至关重要的(至少在2014年的这篇文章中): 不同的配置建立在彼此

  • 描述 (Description) 它允许Backbone将对象用作DOM库。 语法 (Syntax) Backbone.$ = $; 例子 (Example) <!DOCTYPE html> <html> <head> <title>Utility Example</title> <script src = "https://code.jquery.com/jque

  • 我明白为什么C 11中的类型提高了正确性和可运维性。我读到它也可以提高性能(赫伯·萨特的《几乎总是自动》),但我错过了一个很好的解释。 如何提高性能