zoukankan      html  css  js  c++  java
  • 框架笔记

    基于Intel's App Framework

    http://app-framework-software.intel.com/api.php

    进新公司第四天了,第一二两天都在注册邮箱、域、gitLab、wiki、OA,装软件,熟悉IDE。

    第三天终于用IDE做了一个静态的画面。

    今天打算看js API并且运用到自己做的画面中去。

    开始之前,先总结巩固。

    只是一些操作,软件名用alias代替,应该不涉及版权问题。

    第一天,入职,注册,装机。。

    第二天,向IDE开发组的ld姐姐学习了IDE的操作方法:

    1.创建一个新Project或者import一个已经存在的Project

      创建:(顶部工具栏上“反D“形的按钮一键生成)

      导入:  File/import/General/Existing Projects into Workspace

    2.初始化画面用的js文件 app.js 在工程目录中的位置是:

      <projects_name>/src/web

    其底部:

    // We wait until app.ready is available to fetch the data, then we wire up the existing data in the templates
    app.ready(function() {
        if(app.isStmDefined()) {
            try {
                StateRouter.start();
            } catch (e) {
                app.route("Main"); 
                console.log(e);
            }
        } else {
            app.route("feedly_01");
        }
    });

    启动默认本来是指向名为Main的画面,我将else中的route指向改为了feedly_01即我做的第一个画面。

    这样运行的时候就从我做的画面启动了。

    3.Winscape (画面)

      用IDE开发的页面不是一般网页那种一张一张的html,而是一个一个的winscape

      在winscape中的元素是相当于服务器环境中的状态,所以整个winscape只能用IDE的所见即所得功能或者设备simulator以及运行了虚拟服务器后在chrome浏览器中查看。

    4.CC (Custom Control)

      分为两种:

        Automatic Custom Control (采用IDE的可视化编辑功能)

        Manual Custom Control(可以全部手写html,css,js)

    当然我会选择后者。

    在制作CC的时候先用IDE创建新的Manual CC,

    然后在CC的html同级目录做一个叫做preview的html,其结构就是在CC的div外面套上html结构,在CC专有css之前引用几个工厂级的css,像一般网页一样进行布局。做成以后,import CC,并且选中Workbench中的CC元件,用鼠标右键中的IDE Tools/Release CC,这样CC就被释放到<projects_name>/src/web/resources/cc/下。

    选中要放入CC的Winscape,在画面左侧会看到多了一个Resources CC,双击会看到下拉出刚才导入的CC,

    把这个CC拖入Outline窗口内想要放入的容器中,该<CC的名称>将表现为对应的winscape的html中DOM节点中的data-role属性。

    编辑winscape的html和css来调整cc的布局位置。

    注意css的优先级,cc之间不要用同样的class名,会冲突。

    用模拟器和chrome调试,修改的时候先在workbench改,改好释放,不要直接改resources下的cc,以免workbench中仍然存放旧版本。

    5.FC (Function Control)

    和CC一样是可以外部编写的程序控制模块,暂时ld姐姐能力有限还没有进一步讲解,以后进阶再说。

    这样,第三天就这样完成了一个画面。

    第四天,WebAPI的js解读:

    该API目前有25个js文件。

    首先知道itu是iAuto.ui.framework.App的缩写:

     8870 var itu = (function() {
     8871      var uif = iAuto.ui.framework, 
     8872         itu = {
     8873              app : uif.App, 
     8874              controller : uif.Controller, 
     ....
     8882              resource : uif.ResourceManager
     8883          };
     8884     return itu;
     8885  })();

     CC的js文件在IDE中生成的时候,就已经初始化了命名空间和结构,形如:

    /**
     * Author: 
     */
    itu.xcontrol.define("headbar", {
        
        views: ["headbar.html"],
        
        // The properties of the custom control.
        config: {
            
        },
        // The method would be called when create an instance.
        onCreate: function() {
            this.setView("headbar.html", {});
        },
        
        _createCmp_ : function() {
            // ####  #### // 
        },
        
        _bindEvent_ : function() {
            // ####  #### // 
            var me = this;
        }
    });

    CC的js基础:

    他说我们采用的https://github.com/olado/doT 

    另外有一些移动设备事件是用的https://github.com/hammerjs/hammer.js/wiki/Getting-Started

    支持:

     1 hold
     2 tap
     3 doubletap
     4 drag, dragstart, dragend, dragup, dragdown, dragleft, dragright
     5 swipe, swipeup, swipedown, swipeleft, swiperight
     6 transform, transformstart, transformend
     7 rotate
     8 pinch, pinchin, pinchout
     9 touch
    10 release
    11 gesture

    doT的文档慢慢看,

    首先知道插值{{=it.title}}

    {{if (it.innerContent == true){}}
    <div class="headarrow"></div>
    {{}else{}}
    <div class="badge"></div>
    {{}}}//这几个括号是一个整体,它是if语句的结束符,如果没有else的话就像这样:

    {{if (it.innerContent == true){}}
    <div class="headarrow"></div>
    {{}}}

    chj主要告诉我doT如何把CC的html文件静态插入到DOM树,以及如何像后台语言标签那样插入数据,但是这个数据是静态的,只载入一次。

    上面我自己看到的CC配置用js,除了写js,同时还要配置xml

    每次IDE生成xml的时候都会有一行sample property和一行sample event的样例注释

    <!-- sample property
            <Property name="_prop_" type="String" default="" action="config"/> 
        -->
    <!-- sample property
            <Event name="_eventname_"> 
                <Param name="_eventparam_" type="string" />
            </Event>
    -->

    照着样例的写法来配置name(CC在itu.xcontrol.define()中config对象中的若干属性),type(字符串,布尔。。),default(true或者false或者空着)

    例如:

    itu.xcontrol.define("titlebar", {
    
        views : [ "titlebar.html" ],
    
        // The properties of the custom control.
        config : {
            title : null,
            showLeftButton : false,
            showRightButton1 : false,
            showRightButton2 : false,
            showRightButton3 : false,
            leftButtonSrc: "",
            rightButtonSrc1: "",
            rightButtonSrc2: "",
            rightButtonSrc3: "",
        },
        // The method would be called when create an instance.
        onCreate : function() {
            var me = this;
            this.setView("titlebar.html", {
                showLeftButton : me.getShowLeftButton(),
                showRightButton1 : me.getShowRightButton1(),
                showRightButton2 : me.getShowRightButton2(),
                showRightButton3 : me.getShowRightButton3(),
                title : me.getTitle(),
                leftButtonSrc:me.getLeftButtonSrc(),
                rightButtonSrc1:me.getRightButtonSrc1(),
                rightButtonSrc2:me.getRightButtonSrc2(),
                rightButtonSrc3:me.getRightButtonSrc3()
            });
        },
    
        onShow : function() {
            this._customEvents();
        },
        
        onHide : function() {
            this._unbindEvents();
        },
    
        updataTitleBar : function(title) {
            var content = $("#tb-content-span");
            
            content.html(title);
        },
        
        refreshTitleBar : function() {
            var me = this,
                content = $("#tb-content-span");
            
            content.html(me.getTitle());
        },
        
        changeRightButton1 : function(src) {
            var r1 = $("#tb-rightbutton1"),
                img = "url("+src+")";
            
            r1.css("background-image", img);
        },
        
        changeRightButton2 : function(src) {
            var r2 = $("#tb-rightbutton2"),
                img = "url("+src+")";
            
            r2.css("background-image", img);
        },
        
        _bindEvents : function() {
            var me = this;
            var $el = me.$element;
    
            var $back = $el.find("#tb-leftbutton");
            itu.event.on($back, "tap", function(){$el.trigger("touchLeft");}, this);
            var $r1 = $el.find("#tb-rightbutton1");
            itu.event.on($r1, "tap", function(){$el.trigger("touchRight1");}, this);
            var $r2 = $el.find("#tb-rightbutton2");
            itu.event.on($r2, "tap", function(){$el.trigger("touchRight2");}, this);
            var $r3 = $el.find("#tb-rightbutton3");
            itu.event.on($r3, "tap", function(){$el.trigger("touchRight3");}, this);
        },
        
        _customEvents : function() {
            var me = this;
            var $el = me.$element;
    
            var $back = $el.find("#tb-leftbutton");
            itu.event.off($back, "tap");
            var $r1 = $el.find("#tb-rightbutton1");
            itu.event.off($r1, "tap");
            var $r2 = $el.find("#tb-rightbutton2");
            itu.event.off($r2, "tap");
            var $r3 = $el.find("#tb-rightbutton3");
            itu.event.off($r3, "tap");
        },
    
        _createCmp_ : function() {
            // #### 这个跟我无关,千万别跟它写重名的方法 #### //
        },
    
        _bindEvent_ : function() {
            // #### 这个跟我无关,千万别跟它写重名的方法 #### //
            var me = this;
        }
    });
    var me = this;
    var $el = me.$element;

    这里的$element指向IDE生成的DOM结构,就是带有IDE生成的id的用来包裹CC的容器。

    另外还有一个$element不太用到,它是指向CC自身的html整个DOM结构。

    先看一下CC的生命周期:

    基本上我现在只要管onCreate()和onShow(),还有也许需要在onShow()和onHide()之间做一些切换。

    onCreate()只是创建CC对象,onShow()会把CC加载到DOM树。

    onHide()的时候可能要做一些处理。

    而离开这个画面的时候,将依次执行onHide()、onDestroy()、onRemove()

    所有的属性元件都可以用 .getPropertyname1()这样的形式获取到,只要加上get,然后首字母大写即可。

    就像前面的:var me = this;

            this.setView("titlebar.html", {
                showLeftButton : me.getShowLeftButton(),
    //此处的ShowLeftButton就是一个自定义的属性。

     另外如果要继承另一个CC的property和event,除了在js中要写extend:之外,

    itu.xcontrol.define("CC_ButtonBase", {
        
        extend: 'CC_TouchEventBase',
    
        // The properties of the custom control.
        config: {

    在xml头部的extends属性中也要写上

    <Component extClass="titlebar" xtype="titlebar" label="titlebar" category="CustomControl" extends="iAuto.ui.Custom" isContainer="false" isCustomControl="true">

    具体需要写的就是onShow()的部分了,

    一般都会把要做的事情写成若干方法,首先必做的:

    绑定事件(设好trigger供以后使用),

    解绑事件(防止重复绑定事件导致的溢出),

    其他DOM操作(这里要用到框架的语法,比如.css,.trigger,.find,.on,.off,.attr等等)

    那么CC制作中js的部分就大致了解了,除了html和css还学会了写js和xml

    另外跟chj还学了一招IDE的js format快捷键是ctrl+shif+f(windows)

    剩下来winscape的js看上去和CC的也差不多,但是还没有讲解到。

    多了一个initWinscapename: function(){} 应该属于惯用自定义方法名,毕竟不是.方法,显然自定义。

    第五天,学会套CC那些属性和事件的半成品js和xml以后,我发现模拟器和run as app都预览不了乐,很正常,没数据嘛!

    那么,和做ajax页面一样必须要静态假数据来测试!
    静态数据写到哪里呢?这个没有规定,反正最初都是demo嘛,lbq哥哥过来讲解,怎么绑数据,怎么模拟各个画面的切换。

    哥们发了一个他自己做的CC,其中有写数据的接口:

    updateItems: function(items) {
            var tpl = itu.view.get("resources/cc/ddnlist/ddnlist.html"),
                html = tpl({
                    items: items
                });
            this.$content = $.create(html);
            this.$element.empty().append(this.$content);
            //this.bindEvents(); 绑数据不必要包括这个,上面的全要
        },

    另外我在学习的pocket项目的titlebar CC里面是这样写的:

    updataTitleBar : function(title) {
            var content = $("#tb-content-span");
            
            content.html(title);
        },

    就没有用tpl方法去绑数据了,只是用html方法写入。

    上面的tpl方法只是把参数传入的items赋值给:左边的对象items,

    这个items是要写入页面的整个数据模板,类似于json对象。

    写到哪里去呢,虽然lbq说你随便写个地方吗,我觉得不靠谱,决定参照poket写在之前chj叫我不要去碰的_createCmp_里面:

    _createCmp_ : function() {
            // #### Auto Code of Html5 Studio #### // 
            itu.xcontrol.create('AlertView', 'HomeView_alertview1', {});
            itu.xcontrol.create('favtoast', 'HomeView_favtoast1', {});
            itu.xcontrol.create('indicator', 'HomeView_indicator1', {});
            itu.fcontrol.start('ViewControllerStack');
            itu.fcontrol.start('DataProvider');
            itu.xcontrol.create('Menu', 'HomeView_menu1', {});
            itu.xcontrol.create('titlebar', 'HomeView_titlebar1', {
                title : "Pocket",
                showLeftButton : true,
                showRightButton1 : false,
                showRightButton2 : false,
                showRightButton3 : false,
                leftButtonSrc : "resources/img/menu.png",
                rightButtonSrc1 : "",
                rightButtonSrc2 : "",
                rightButtonSrc3 : ""
            });
            itu.xcontrol.create('List', 'HomeView_list1', {});
        },

    像这样,itu.xcontrol.create的时候,就已经把“Pocket”和静态数据写进去了。

    然后自己测试数据有没有绑好。

    做好若干个画面以后,自己给按钮绑好事件后,用app.js中同样的写法,在事件中route不同的画面,自己调试。

    第五天自己开始做写好doT的画面,假数据放在winscape创建时_createCmp_

    第六七八(周一到周三)天继续做画面。

    第九天,不幸迟到18秒。。和以前的师傅见面吃了午饭。。。帮sj调整了一下换了框架后的手机app样式。

    第十天,将sj的两三百行样式精简到50来行,并对两个背景图片进行整合。

    上面那种写假数据的方式,在第三周的第一个工作日(8/25)又被刷新了。

    hyx带我联调了我做的contengcover画面,他告诉我CC的xml是不用写的,config也可以不用写。

    但是通过实践发现,CC的property是必须在onCreate里面初始化好的。

    绑定事件时不要直接绑到jqmobi的对象,最好用itu.event.on来绑到api的对象上。

    还是采用tpl绑定数据,数据从winscape的js内执行CC的方法时传入。

    首先要getCmp得到CC,然后执行CC的方法,带上参数(数据)。

    另外还要注意一下this上下文,api里面有个方法,iAuto.uli.bind可以将他后面的第一个参数作为上下文赋给后面那个方法。比如iAuto.uli.bind(this,this.myfunc)

    本来hyx用this.setMe(this)来储存this在var me内部,然后再用this.getMe()来取得原先的this,但是后来他发现用this来取this有自相矛盾,所以就放弃了这种方法。

  • 相关阅读:
    联赛模拟测试19
    联考Day5
    联赛模拟测试18(A.施工未补)
    题解 CF960G 【Bandit Blues】
    题解 P5518 【[MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题】
    概率与数学期望笔记
    题解 P3704 【[SDOI2017]数字表格】
    主定理
    【题解】Hikari与组合数
    【题解】P2303 [SDOI2012] Longge 的问题
  • 原文地址:https://www.cnblogs.com/haimingpro/p/3912048.html
Copyright © 2011-2022 走看看