[转]快速构建App界面的框架(●'?'●) -----SalutJs

前言

卤煮在公司之初接触到的是一个微信APP应用。前端技术采用的是Backbone+zepto等小型JS类库。在项目开发之初,这类中小型的项目采用这两种库可以满足基本的需求。然而,随着迭代的更新和业务的增加,成堆的代码被覆盖到项目中去了,使得这样一种技术架构方式变得异常的臃肿,很多界面变得异常的难以维护,因此卤煮打算重构公司前端架构。

卤煮的想法是:采用异步模块的加载方式,将不同微信菜单进入的界面分成若干的模块文件,这样的好处是按照需求加载界面,而且每个界面都单独成模块,便于维护和独立开发。于是卤煮花了大概一个月的时间重构了前端。也就是从那时起以backbone的框架为基础,封装成一套配置框架。就这样,项目经过改良,变得比较容易维护,卤煮也从其中学到了若干经验,积累了一些有用的代码,最后逐步经过改进,在经过实践的考验(用此框架完成了其他两个中小项目),整理成了一套自己的小型框架出来,卤煮将之命名为SalutJs。它刚刚诞生,它并不怎么成熟,文档写得比较马虎,具体得看开发实例,卤煮都放到github上去了。卤煮用它做过三个项目,但总体感觉是比较不错的,它非常适合做这样的类似微信app中小型单页应用。本篇博文就是向诸位分享卤煮的一些经验和框架知识,希望能够帮助正在最类似web应用而不知道怎么下手的诸君一些小小的帮助。

架构思路

如卤煮之前说的那样,随着业务和界面的增加,代码回变得越来越难以维护。碰到此类问题,第一件想到的事情就是一个字“分”。但如何分呢?这个问题卤煮考虑了许久。卤煮做的微信开发,一个线上的点餐项目,它包含如下功能:点餐,会员中心,优惠,砍价,呼叫等等十几个,这些功能里面,每个功能里面进去会有相关的若干界面。可以想见,如果把所有的界面业务代码放在一个文件里面,整个项目会变得异常的臃肿最后奔溃。卤煮考虑的是将每个功能里面的若干界面的代码放到同一份js里面,这样,当用户使用其中一个功能的时候只需要加载一个js而不是十几个界面代码。当我们需要从一个功能里面的界面切换到另外一个功能模块里面的界面时,我们运用requirejs的异步加载方式,异步载入需要加载的文件。这样便解决了代码耦合和臃肿的问题了。值得一提的是我们结合界面的原则是根据业务需求来的。卤煮举个例子:在点菜功能里面有若干界面,但点菜功能不一定会需要会员卡功能界面,所以,我们在写点菜功能文件的时候,是不需要把会员卡界面业务包含进去的。

html模板

在渲染功能上,卤煮没有做何改变,沿用的是underscore的template方法渲染。由于界面的业务已经分开,那么html结构也对应的可以分开。不必要一开始就将不必要的html代码放入我们的主体文件中。卤煮加载html模板的原则是跟js有些一样的,方法则是用ajax讲html以文本的形式下载下来,然后渲染到界面中去。在require的时候,我们会去服务器拉去对应的模板文件,也就是说我们实现不同大功能之间的跳转需要请求两个文件,一个是xx.js,另外一个是xx.html。实际开发过程中,你不需要自己去调用这些文件,使用route.myNavigate方法,框架会自动帮助你去下载js和html文件:

目录结构

在使用Salut的时候需要按照既定的一些目录规则来创建文件结构。我们的项目大致分为若干目录:

construction:配置文件以入口文件

css:样式文件

fonts:字体文件

img:存放路径

js:存放所有基础架构js和业务代码以及模板文件

node:运行测试项目node文件(实际开发中请无视)

page_main.html:主题html文件

run.js: node文件,运行即可将项目跑起来

js文件夹下面又分了若干文件夹,存放了不同的js文件

base:salut的核心代码

core:backbone和zepto等底层代码

plugins:若干插件

tpl:模板文件

use:每个功能的业务代码文件

config:配置文件

map.html:需要用到的地图文件

入口:

page_main.html是整个项目的html,如果没有其他特殊的业务需求,所有的单页面都在此html中实现,不会有url的跳转。它的最外层是一层div包裹着的,作为最外层的容器。然后是用require引入的入口js的文件:


1

2

3

4

5

6

<body>

<!-- 最外层容器 -->

<div id="pageWindow"></div>

<!-- 引入require 载入入口文件 -->

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

</body>

我们看到,只要当界面一开始加载,然后开始引入了app.js文件,在app.js中,我们会判断当前界面的地址,配置好require的默认配置,引入自定义配置,开始拉取对应的界面业务代码下来:

命名规则

Salut的命名有自己的一套规则:主要体现在文件命名上:在命名业务文件上采用写字母开头,而在命名html文件上规则是tp加小写字母开头的对应js业务文件。在为每个节目注册路由时,路由的名称为大写字母开头,界面名则为小写字母开头,但名称都是一样的。每次你建立一个新功能的时候,必须去config里配置这个功能模块文件的名字和里面对对应的界面名称的关系,在github的例子中你会看到。这样做的原因就是js没有读取本地文件的能力,所以你必须把其他功能文件中的界面写在配置文件里面,这样,当需要去load另外一个界面的时候,才知道我们是需要加载哪一个js。

路由规则

Salut并没有改变backbone的路由规则,它沿用了之前的hash做法,在backbone源码中,你可以看到有多种方式实现路由推动事件,他们是hash、pushstate、和定时函数。Salut的初衷也是分界面,每一个路由对应着每一个界面,在地址栏中改变hash值(#号后面那部分,对应不同界面)从而跳转不同的界面。这个卤煮在之前的博文中已经讲到过了,这里就不再提。路由的名称是和界面模块的名称有关系的,在命名规则里面我们也已经提到过了。

总结

Salut在构建类似以上提到的类似微信app的应用时非常适合,也非常简单。它对于中小型的app应用来说是比较合适的。学会规则后几乎只要简单的配置就能完成加入一个界面到项目中的工作。卤煮自己考虑后续把requirejs这样的模板加载文件替换掉(已经写完),最后把backbone底层框架也换调,把他做成一套完全自主的js框架。不过这是一条比较漫长的道路了。卤煮已经把相关的文档上传到了github上,里面有一整套demo,注释也写得比较详尽。诸君如果有兴趣,请关注一下。海纳百川,有容乃大。Saultjs作为初生的一套轻框架存在或多或少的问题,也由于他的实践经验不多,要求它不断的在实践中不断地进步完善。当然,凭借卤煮一人之力,实在微不足道,为此特将其开源,希望诸君为它添砖加瓦,使得它更加强大。或者可以提供自己的意见,也非常欢迎贡献代码。总而言之,卤煮在此并不是推广自己的框架,只是分享一下工作中总结起来的一些代码工具而已。如果你什么疑问,请发邮件到[email protected]或者在博客评论区留下你的意见,卤煮看到后会及时回复的。

唔。。。。。凌晨一点半写完,诸君能看到这里给个推荐吧。

SalutJS的github地址

[转]快速构建App界面的框架(●'?'●) -----SalutJs

时间: 2024-11-08 05:01:55

[转]快速构建App界面的框架(●'?'●) -----SalutJs的相关文章

快速构建App界面的框架(●&#39;?&#39;●) -----SalutJs

前言 卤煮在公司之初接触到的是一个微信APP应用.前端技术采用的是Backbone+zepto等小型JS类库.在项目开发之初,这类中小型的项目采用这两种库可以满足基本的需求.然而,随着迭代的更新和业务的增加,成堆的代码被覆盖到项目中去了,使得这样一种技术架构方式变得异常的臃肿,很多界面变得异常的难以维护,因此卤煮打算重构公司前端架构. 卤煮的想法是:采用异步模块的加载方式,将不同微信菜单进入的界面分成若干的模块文件,这样的好处是按照需求加载界面,而且每个界面都单独成模块,便于维护和独立开发.于是

带你十分钟快速构建好 SpringBoot + SSM 框架

目前最主流的 java web 框架应该是 SSM,而 SSM 框架由于更轻便与灵活目前受到了许多人的青睐.而 SpringBoot 的轻量化,简化项目配置, 没有 XML 配置要求等优点现在也得到了大众的青睐 而本文,我将教大家如何在 intellij idea 中快速构建好一个 Maven + Spring + SpringMVC + MyBatis + SpringBoot 的框架,做到了足够精简,让你可以立刻开始你的 web 项目 一. 创建项目 选择 Spring Initialliz

从头学Qt Quick(1) --体验快速构建动态效果界面

自2005年Qt4发布以来,Qt已经为成千上万的应用程序提供了框架服务,现在Qt已经基本上支持所有的开发平台了,这里面既包含了桌面.嵌入式领域,也包括了Android.IOS.WP等移动操作平台,甚至支持最新的Ubuntu Phone. Qt Quick是一个UI技术组,Qt Quick本身主要包含了QML.JavaScript. Qt C++三种技术.其中的主角就是QML(Qt Declarative Module)也是我打算在这个系列里面描述的主要对象.QML的主要作用我理解就是将界面设计与

BaseProject快速构建自己的APP

关于BaseProject BaseProject是一个快速构建app工程的开源项目,目的是为了更加方便的初始化一个工程,省去编写或者导入BaseActivity,BaseFragment,网络请求,工具类等基础又实用的代码.让你更加专注去实现自己产品需求,业务逻辑,而不是浪费时间在重复的工作上! https://github.com/flyzend/BaseProject 如何依赖BaseProject 1. 在project.gradle 文件中添加 maven { url "https:/

10大APP界面框架设计模式详解

随着移动互联网的发展,移动app已经成为了每个互联网公司的标配了,那作为产品经理,我们如何设计出更加符合用户体验的app产品呢?今天和大家分享的就是10中最常见的app界面光甲设计模式,一起来看看吧. 1.标签导航 标签导航是十大界面框架设计里最常用的界面框架设计,也是被业界之内公认的一种普遍使用的页面框架设计.那么这种页面框架设计在作业方面对一个用户来说也是最常见的一种页面框架设计,比如说微博.微信.手机百度.支付宝.淘宝,这些我们所谓的超级APP都是运用的标签导航,无一例外.从这个角度也可以

快速构建框架(S2SH)

搭建项目:1.创建web项目2.引入类库    [struts2]        asm-3.3.jar        asm-commons-3.3.jar        asm-tree-3.3.jar        commons-fileupload-1.3.1.jar        commons-io-2.2.jar        commons-lang3-3.1.jar        freemarker-2.3.19.jar        ognl-3.0.6.jar    

React Native是一套使用 React 构建 Native app 的编程框架

React Native at first sight what is React Native? 跟据官方的描述, React Native是一套使用 React 构建 Native app 的编程框架. 推出不久便引发了广泛关注, 这也得益于 JavaScript 开放而活跃的技术社区和 React Native 完备的技术体系支持. 本文试图概括的介绍 React Native. React Native 主要是一套 Runtime, 包括一套 React.js 库使得开发可以用 Reac

【spring-boot】快速构建spring-boot微框架

spring-boot是一个快速构建环境的一套框架,其设计理念是尽可能的减少xml的配置,用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 废话不多说,关于spring-boot是什么具体请百度. 官网:http://projects.spring.io/spring-boot 1. spring-boot是一个mavan项目,所以其使用的jar包全部是通过maven管理,当然,使用maven也是非常方便的. 首先上我的

基于Bluemix快速构建部署一款Java小程序——微博影响力分析器

一.前言 近年来IT界风云际会,各种新概念如大数据.云平台.虚拟化等,如雨后春笋般层出不穷.而云平台,可以说是近些年来引领时代新潮的边缘概念之一,各大厂商竞相推出各种云产品,抢占云市场高地.近期,IT百年老厂IBM也推出了其花费重金打造的基于CloudFoundry开放标准的云平台Bluemix.本文就旨在从一位普通Java开发者角度,尝鲜Bluemix云平台及其提供的Cloudant服务,快速构建并部署一款Java小程序"微博影响力分析器". 二."微博影响力分析器&quo