***********************************************************************************

一、项目结构:

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

***********************************************************************************

四、视图嵌套结构:

***********************************************************************************

五、视图执行逻辑

  1. 视图启动
  2. 执行before函数
  3. 获取模板
  4. 翻译模板
  5. 绑定数据
  6. 注册视图事件
  7. 执行after函数
  8. 执行子视图启动函数
  9. 执行done函数

以上函数大部分都是通过异步方式执行

***********************************************************************************

六.、视图间事件通讯

各视图都是独立运行的,视图间通讯是通过事件来进行,每个视图发起的事件会在当前路由内所有的视图中广播,匹配的事件才执行

朱现国 2015/6/3

基于require+knockout的webapp结构设计的更多相关文章

  1. 学习 | 基于require.js的三级联动菜单【入门】

    主要目的是学习如何使用require.js AMD就是通过延迟和按需加载来解决各个模块的依赖关系,其中require就是AMD的框架之一 它的优点是可以解决以下问题: JS文件的依赖关系. 通过异步加 ...

  2. 基于vue移动音乐webapp跨域请求失败的问题解决

    在学习一位vue大牛的课程<VUE2.0移动端音乐App开发>时,由于vue的版本原因遇到了一些问题 这是其中之一,花费了很多的时间去解决 虽然搞定了这个问题,但是很多东西理解也不是很到位 ...

  3. 基于SpringBoot+SSM实现的Dota2资料库智能管理平台

    Dota2资料库智能管理平台的设计与实现 摘    要 当今社会,游戏产业蓬勃发展,如PC端的绝地求生.坦克世界.英雄联盟,再到移动端的王者荣耀.荒野行动的火爆.都离不开科学的游戏管理系统,游戏管理系 ...

  4. 【Knockout.js 学习体验之旅】(3)模板绑定

    本文是[Knockout.js 学习体验之旅]系列文章的第3篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  5. 【Knockout.js 学习体验之旅】(2)花式捆绑

    本文是[Knockout.js 学习体验之旅]系列文章的第2篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  6. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  7. MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法

    返回目录 说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都 ...

  8. 下载PHPDroid: 基于WebView和PHP内置HTTP服务器开发Android应用

    基于Android上的PHP(比如我打包的PHPDroid),寥寥几行PHP代码,就能实现一个支持无线局域网用浏览器访问的Android手机的Shell,用于执行命令和PHP代码.       个人在 ...

  9. 基于angular的route实现单页面cnodejs

    Angular ui-router 前言 之前不太理解前端怎么实现路由功能,以前知道有一种方式使用html5的pushState可以操作url才实现路由的功能,在实践项目中也用过一次,后来这种操作叫成 ...

随机推荐

  1. C#生成漂亮验证码完整代码类

    using System;using System.Web;using System.Drawing;using System.Security.Cryptography; namespace Dot ...

  2. 配置uwsgi

    首先要明确的是,如果你喜欢用命令行的方式(如shell)敲命令,那可以省去任何配置. 但是,绝大多数人,还是不愿意记那么长的命令,反复敲的.所以uwsgi里,就给大家提供了多种配置,省去你启动时候,需 ...

  3. javascript 类型的判断

    在平常写js代码,类型判断必不可少,那么我们常见有哪几种?看到了标题,先不看你会想到那些方法 ,常用呢些呢?那么今天我自己总结一些判断类型的判断,如有错,万望告知! 1:typeof 常用这种方法不错 ...

  4. java 接口默认修饰符问题

    package test; public interface InterfaceTest { void todo();} /** * 以下是反编译的内容,接口里的方法默认都是public的.abstr ...

  5. jQuery ajax 与服务器交互方法

    1.HTML <table> <tr> <td>用户名:</td> <td><input type="text" ...

  6. 字符串的模式匹配(Java实现)

    字符串的模式匹配 字串的定位操作通常称做模式匹配,是各种串处理系统中最重要的操作之一.本文主要介绍两种常用的实现算法: 1.暴力匹配 2.KMP算法 1.暴力匹配 时间复杂度为O(n*m):n为主串长 ...

  7. Access-简易进销存管理系统

    p{ font-size: 15px; } .alexrootdiv>div{ background: #eeeeee; border: 1px solid #aaa; width: 99%; ...

  8. 老李案例分享:MAT分析应用程序服务出现内存溢出过程

    老李案例分享:MAT分析应用程序服务出现内存溢出过程   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的loa ...

  9. Struts2基础学习(四)—类型转换器和数据校验

    一.自定义类型转换器 1.概述      Struts2提供了常规类型转换器,可以用于常用数据类型的转换,但如果目标类型是一个特殊类型,则需要自定义转换器.Struts2 类型转换器实际上都是基于OG ...

  10. C++(浅析枚举类型-enum)

    枚举类型 枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合. 如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型.所谓&quo ...