Skip to content

xiaxiaodong/closure_study_road

Repository files navigation

#Google Closure 学习笔记

##命名空间 Namespace

goog.provide()  
    写在文件第一行 代表本文件的命名空间
    
    demo:
        goog.provide('tutorial.notepad.Note');
    
    等同于
        tutorial = tutorial || {};
        tutorial.notepad = tutorial.notepad || {};
        tutorial.notepad.Note = tutorial.notepad.Note || {};
    
goog.require()
    在文件头部,代表需要引入的命名空间
    
    goog.require('goog.dom')
    
    实际发生:
        下载deps.js 这个脚本包含了各个组件的依赖关系
        然后会下载对应的脚本并执行

##继承 Inheritance

继承另一个组件,并在父级组件上做适当修改,属于函数式继承(根据父级构造函数修改实例后,再添加或修改)

goog.inherits(子级, 父级);

demo:
    goog.ui.MenuButton = function(content, opt_menu, opt_renderer, opt_domHelper) {
        //实际的函数继承
        goog.ui.Button.call(this, content, opt_renderer ||
          goog.ui.MenuButtonRenderer.getInstance(), opt_domHelper);
        ...
    };
    //说明打包关系
    goog.inherits(goog.ui.MenuButton, goog.ui.Button);

#组件库学习

不得不说
    这个库的构建思想和代码编写不得不说是很棒的,代码生成后很舒坦,压缩也很彻底
    但不得不说,这个库的组件没有区分基础和插件,对学习造成了不少的困难,没有中文文档

官网api地址 https://google.github.io/closure-library/api/

官网demo地址 https://google.github.io/closure-library/source/closure/goog/demos/

#写累了,如果之后再看api的话,就继续写

#Google Closure Library 项目构建说明

建议观看官网完整教程 https://developers.google.com/closure/library/

出bug了查看这个网页 https://developers.google.com/closure/compiler/docs/api-tutorial3 意外找到一份中文文档,我没细读,构建部分应该差不多 http://wenku.baidu.com/view/cd5299402f60ddccda38a062.html?re=view

##命令行 路径在git下载的最顶层目录,与Closure Library项目文件夹同级

运行构件化需要 python 2.7 和java的环境,请自行安装

myproject 是项目名称,也是文件夹名称

实例命令行
closure-library/closure/bin/build/closurebuilder.py \
  --root=closure-library/ \
  --root=myproject/ \
  --namespace="myproject.start" \
  --output_mode=compiled \
  --compiler_jar=compiler.jar \
  --compiler_flags="--js=deps.js" \
  --compiler_flags="--compilation_level=SIMPLE_OPTIMIZATIONS" \
  > my-compiled.js
  

第一行命令是启动 closurebuilder 这个文件,这个文件是启动文件
    下方为参数
        root 扫描js的根目录
        namespace 是脚本中导出的函数的名称
        output_mode 有两种模式 
                    debug   不会压缩文件,html的script需要指向base.js
                    compiled 会将文件和所需的模块压缩为一个脚本
        compiler_jar 压缩时,使用的是java的压缩包
        
        compiler_flags 解析时的标志
            js  deps.js的位置
            compilation_level  
                WHITESPACE_ONLY         仅仅去掉空格和换行  --未测试过,发现于百度文库的中文文档
                SIMPLE_OPTIMIZATIONS    只是简单压缩
                ADVANCED_OPTIMIZATIONS  更进一步的压缩,如果函数未被使用,会被删除掉  
                                        
        >  输出的脚本路径和名称

若写成bat文件需要写成单行
    python closure-library/closure/bin/build/closurebuilder.py  --root=closure-library/  --root=myproject/  --namespace="myproject.start"  --output_mode=compiled  --compiler_jar=compiler.jar --compiler_flags="--js=deps.js" --compiler_flags="--compilation_level=ADVANCED_OPTIMIZATIONS"  > myproject/myproject.js
    pause

##编写 deps.js 文件 deps文件是文件的对应关系,说明每一个文件的命名空间和依赖的包

goog.addDependency('相对于deps的js文件路径', ['本文件的命名空间'], ['本文件依赖的命名空间']);
demo:
    goog.addDependency('dom/forms.js', ['goog.dom.forms'], ['goog.structs.Map']);
    

借助 depswriter.py 这个脚本,来创建自己的命名空间
    
    losure-library/closure/bin/build/depswriter.py  \
        --root=closure-library/ \
        --root=myproject/ \
        --output_file='deps.js'
    执行脚本后,会在当前路径下生产新的deps.js

若写成bat文件需要写成单行
        python closure-library/closure/bin/build/depswriter.py   --root=closure-library/ --root=myproject/ --output_file=deps.js

##事件 Events

可以监听dom,也可以监听组件

goog.events.listen( dom 或 组件实例 , 事件类型,
        处理函数, false, this);

监听DOM demo:
    goog.events.listen(this.elHeader_, goog.events.EventType.CLICK,
        this.onHeaderClick_, false, this);
        
监听组件 demo:
    var zippyHeader = document.getElementById('header');
    var zippyContent = document.getElementById('content');
    var zippy = new goog.ui.Zippy(zippyHeader, zippyContent);

    function react(e) {
        alert('The Zippy opened!');
    }
    goog.events.listen(zippy, goog.ui.Zippy.Events.TOGGLE, react);

##网络请求 demo

这里我列出一些使用到的demo,方便以后查找使用
具体的api最好是看源码,由于线上使用的库是旧版本的,demo用的api也是滞后于新版本的.
使用时可能还需要你们实际测试一下.

xhr
    goog.require('goog.events');
    goog.require('goog.net.EventType');
    goog.require('goog.net.XhrIo');
    
    var xhrIo = new goog.net.XhrIo();
    
    goog.events.listen(xhrIo, goog.net.EventType.SUCCESS, function(e,a){
        var xhr = e.target.xhr_;
        console.log(e.target.getResponseJson());
        console.log(e.target.getResponseText());
    });
    
    xhrIo.send(
        '/users',
        "post",
        'type=like'
    );
    
jsonp
    goog.require('goog.net.Jsonp'); 

    var jsonp = new goog.net.Jsonp('/users');
    
    var userCallback = function(data) {
        console.log(JSON.stringify(data,null,2));
    }
    var payload = {atisket: 'atasket', basket: 'yellow'};
    jsonp.send(payload, userCallback, undefined, 'haha');

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published