基于require+knockout的webapp结构设计
***********************************************************************************
一、项目结构:
Webapp
----Audio:音频文件
----Build:压缩处理后的文件
----Css:css文件
----Font:字体文件
----Html:模板文件
----Image:图片文件
----Js:js文件
--------app
-----------dialog:对话框视图
-----------languages:语言词典
-----------helper:辅助工具子类
-----------model:业务模型
-----------layout:布局视图
-----------view:布局中子视图
main.js:app入口
lib:第三方js库
app.js:全局对象
二、代码结构:
***********************************************************************************
define(function (require) {
/*严格模式*/
'use strict'
/*第三方库引用定义*/
var lib = {
ko: require('knockout'),
$: require('jquery'),
}
/*工具函数引用定义*/;
var helper = {
view: require('app/helper/view'),
common: require('app/helper/common'),
};
/*数据模型引用定义*/
var models = {
System: require('app/Model/System'),
Token: require('app/Model/Token'),
};
return function (obj) {
var me = this;
/*内部变量定义*/
me = helper.view.extend(me, obj);
me.templateUrl = 'share/html/view/xxxx.html';
me.viewModel = {};
me.events = {
/*事件函数*/
};
me.methods = {
/*公共函数*/
};
me.before = function (callback) {
/*业务代码.....*/
if (callback) callback();
}
me.bind = function (callback) {
/*业务代码.....*/
if (callback) callback();
}
me.after = function (callback) {
/*业务代码.....*/
if (callback) callback();
}
me.done = function (callback) {
/*业务代码.....*/
if (callback) callback();
}
}
});
***********************************************************************************
三、加载顺序:

1.url改变触发window.onhashchange
2.根据hash在routes中找出匹配route
3.根据route找到相应LayoutView
4.启动LayoutView
***********************************************************************************
四、视图嵌套结构:

***********************************************************************************
五、视图执行逻辑

- 视图启动
- 执行before函数
- 获取模板
- 翻译模板
- 绑定数据
- 注册视图事件
- 执行after函数
- 执行子视图启动函数
- 执行done函数
以上函数大部分都是通过异步方式执行
***********************************************************************************
六.、视图间事件通讯
各视图都是独立运行的,视图间通讯是通过事件来进行,每个视图发起的事件会在当前路由内所有的视图中广播,匹配的事件才执行
朱现国 2015/6/3
基于require+knockout的webapp结构设计的更多相关文章
- 学习 | 基于require.js的三级联动菜单【入门】
主要目的是学习如何使用require.js AMD就是通过延迟和按需加载来解决各个模块的依赖关系,其中require就是AMD的框架之一 它的优点是可以解决以下问题: JS文件的依赖关系. 通过异步加 ...
- 基于vue移动音乐webapp跨域请求失败的问题解决
在学习一位vue大牛的课程<VUE2.0移动端音乐App开发>时,由于vue的版本原因遇到了一些问题 这是其中之一,花费了很多的时间去解决 虽然搞定了这个问题,但是很多东西理解也不是很到位 ...
- 基于SpringBoot+SSM实现的Dota2资料库智能管理平台
Dota2资料库智能管理平台的设计与实现 摘 要 当今社会,游戏产业蓬勃发展,如PC端的绝地求生.坦克世界.英雄联盟,再到移动端的王者荣耀.荒野行动的火爆.都离不开科学的游戏管理系统,游戏管理系 ...
- 【Knockout.js 学习体验之旅】(3)模板绑定
本文是[Knockout.js 学习体验之旅]系列文章的第3篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...
- 【Knockout.js 学习体验之旅】(2)花式捆绑
本文是[Knockout.js 学习体验之旅]系列文章的第2篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...
- 【Knockout.js 学习体验之旅】(1)ko初体验
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
- MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法
返回目录 说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都 ...
- 下载PHPDroid: 基于WebView和PHP内置HTTP服务器开发Android应用
基于Android上的PHP(比如我打包的PHPDroid),寥寥几行PHP代码,就能实现一个支持无线局域网用浏览器访问的Android手机的Shell,用于执行命令和PHP代码. 个人在 ...
- 基于angular的route实现单页面cnodejs
Angular ui-router 前言 之前不太理解前端怎么实现路由功能,以前知道有一种方式使用html5的pushState可以操作url才实现路由的功能,在实践项目中也用过一次,后来这种操作叫成 ...
随机推荐
- 英伟达CUVID硬解,并通过FFmpeg读取文件
虽然FFmpeg本身有cuvid硬解,但是找不到什么好的资料,英伟达的SDK比较容易懂,参考FFmpeg源码,将NVIDIA VIDEO CODEC SDK的数据获取改为FFmpeg获取,弥补原生SD ...
- 隐式的处理SOAPHeader消息
先用一下比较基础的隐式方式处理我的SOAPHeader消息,注意的是QName的使用,代码如下: public static void main(String[] args) { try { //创建 ...
- div背景图片或颜色不显示的解决办法
背景图片不显示的原因: 1. css没有被调用 2. css图片地址不对 3. div的高度没有固定,是auto.没有设值或者高度不够 4. div被嵌套 5. div代码不规范 解决办法: (1)D ...
- .Net 分布式技术比较
内容转自于 http://www.mamicode.com/info-detail-585547.html .NET 分布式技术比较 1. MSMQ(Microsoft Message Queue) ...
- 在Selenium Webdriver中使用XPath Contains、Sibling函数定位
前言 在一般情况下,我们通过简单的xpath即可定位到目标元素,但对于一些既没id又没name,而且其他属性都是动态的情况就很难通过简单的方式进行定位了. 在这种情况下,我们需要使用xpath1.0内 ...
- macOS平台下虚拟摄像头的研发总结
一.背景介绍 虚拟摄像头,顾名思义,就是利用软件技术虚拟出一个摄像头硬件设备供用户使用.当我们需要对视频图像进行处理再输出时,虚拟摄像头就具备非常大的价值了.关于如何在Windwos上实现一个虚拟设备 ...
- Eclipse中Maven插件部分常用功能命令介绍
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6689010.html Eclipse中安装Maven插件之后,就能很方便的管理Maven项 ...
- Centos7部署Zabbix
转载于http://www.cnblogs.com/xqzt/p/5124894.html,更正了部分错误,并增加了个别问题处理办法. 一.Zabbix简介 zabbix是一个基于WEB界面的提供分布 ...
- python 面向对象编程(一)
一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class c ...
- es6 module + webpack
其实在之前本人就看了 es6 里面的一部分内容,当然是阮一峰大神的 ECMAScript 6 入门. 最近闲来无事又来看下,其中 Module 的语法 这章时候,用里面代码跑的时候,理所当然的报错 S ...