zoukankan      html  css  js  c++  java
  • 基于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

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

    四、视图嵌套结构:

         

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

    五、视图执行逻辑

         

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

     

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

     

     

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

    六.、视图间事件通讯

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

                                                                                                                                  朱现国 2015/6/3

  • 相关阅读:
    在 XD 和 Axure 中使用 iconfont
    chartjs 曲线图 纪要
    js ajax 等的的一些纪要
    程序员的方向
    sqlserver 常用的练习50例子
    (function(){})()原理
    layer弹出层详解
    sqlserver 表值函数 保存使用
    关于批量下载线程池与信号机制的使用
    tp5.1 phpstudy composer 配置等
  • 原文地址:https://www.cnblogs.com/zhuxianguo/p/5972366.html
Copyright © 2011-2022 走看看