1. label的mouseChildren属性为true,但label本身是不需要监听textfield的任何事件的,

  个人猜测是为了给TextInput, TextArea用的,因为后两者需要监听textfield的事件。

  所以,我觉得最好的处理方式还是lable的mouseChildren属性设置为false,在TextInput中再设置mouseChildren为true

2.DragMangager中找出drop对象的方式比较巧妙,通过value.hasEventListener(DragEvent.DRAG_DROP)带判断是否是合适的对象!

  这个很值得借鉴。当项目中还有一个需求时,当拖动某个display时,还需要目标target闪烁以告知用户往哪儿脱。

  目前的DragManager似乎还无法很好的解决这个需求,如果需要处理的话,需要写在

    _dragInitiator.dispatchEvent(new DragEvent(DragEvent.DRAG_START, dragInitiator, data));

  中,但这又会才生耦合。这个问题还需要好好考虑。

  还有一点是,drag是在display是在mouseDown事件中触发的,如果盖在mouseMove中是不是更好?

  即是,在mouseDown事件中注册stage的mouseMove的监听,如果有移动,则startDrag,当然了,这里还需要要给标识,标识是否已经start。不知道这样是否更好!

  就目前的实现来说,每次mouseDown都触发DragEvent.DRAG_START事件,我觉得有些浪费。

  当然,这个触发也仅仅针对是可拖动的对象,如果不是可拖动的对象,mouseDown就不会调用DragManager的doDrag方法,理论上也不会浪费很多。

3.TipManager是监听stage上的tip事件来触发的,这也是一个比较好的思路!

4.RenderManager中在invalidate在一个标识,而不是每次调用都addEventListener来判断是不是会更高效?

5.对于子对象的event似乎处理的不够好。以TextInput为例,捕获到textfield的Input事件时,又重新抛出这个事件。

  如果用户在使用的过程中,监听了TextInput的事件,那么事件响应代码会被执行两次,一个是textfield抛出的,还有一次是TextInput抛出的。

  所以个人绝对在TextInput内部,捕获到textfield事件后,应该调用事件的stopImmediatePropagation方法。然后再抛出。

6.查看2.3和2.5版本的list,list的item只能是runtime和box这两种,如果list的内容是单单某个组件就会报错,一定要把组件转换成box。

  2.3版本的list解析在view中有特殊处理,

    if (comp is List && node.@name == "render")  {
      if (node.name() == "Box")  {

  2.5版本中,list内容又有处理,

    cell = _itemRender is XML ? View.createComp(_itemRender) as Box : new _itemRender();

    var cell:Box = getChildByName("item" + i) as Box;

  不知道为什么非要这样设计。

7.View的XML解析和runtime概念真的超赞!!!

  不知道是不是借鉴了bit101的MinimalComps的MinimalConfigurator,而mornui中的var和minimalComps中的idMap也有异曲同工之妙。

  但minimalComps中的prop赋值时,有一个specialProps,这里面的属性赋值时机是在其他prop之后,这个没懂。mornui中也不存在有优先级的prop。

  MinimalComps的源码很早前就看到,印象最深的是它的延迟渲染的理念,却没想到MinimalConfigurator也是很值得参考的东东。惭愧。

8.配合MornBuilder使用,真的超级方便!再赞一个!

2014.04.09补充

9.自定义morn组件时,会编写该组件的xml的信息,每个属性有一个默认值。当编辑器发布页面的时候,如果编辑器中属性值和默认值相同,则发布出来的页面不带该属性,否则会带有该属性修改后的值。

这样也减少了一些不必要的运算!做到这点很细心!

2014.04.11

关于drag比较好的一种实现:

监听targer的mouse_over事件,如果e.buttondown为true,则调用dragManger的dodrag方法

MornUI 源码阅读笔记的更多相关文章

  1. CI框架源码阅读笔记5 基准测试 BenchMark.php

    上一篇博客(CI框架源码阅读笔记4 引导文件CodeIgniter.php)中,我们已经看到:CI中核心流程的核心功能都是由不同的组件来完成的.这些组件类似于一个一个单独的模块,不同的模块完成不同的功 ...

  2. CI框架源码阅读笔记4 引导文件CodeIgniter.php

    到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...

  3. CI框架源码阅读笔记3 全局函数Common.php

    从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap ...

  4. CI框架源码阅读笔记2 一切的入口 index.php

    上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里再次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中, ...

  5. 源码阅读笔记 - 1 MSVC2015中的std::sort

    大约寒假开始的时候我就已经把std::sort的源码阅读完毕并理解其中的做法了,到了寒假结尾,姑且把它写出来 这是我的第一篇源码阅读笔记,以后会发更多的,包括算法和库实现,源码会按照我自己的代码风格格 ...

  6. Three.js源码阅读笔记-5

    Core::Ray 该类用来表示空间中的“射线”,主要用来进行碰撞检测. THREE.Ray = function ( origin, direction ) { this.origin = ( or ...

  7. PHP源码阅读笔记一(explode和implode函数分析)

    PHP源码阅读笔记一一.explode和implode函数array explode ( string separator, string string [, int limit] )此函数返回由字符 ...

  8. AQS源码阅读笔记(一)

    AQS源码阅读笔记 先看下这个类张非常重要的一个静态内部类Node.如下: static final class Node { //表示当前节点以共享模式等待锁 static final Node S ...

  9. libevent源码阅读笔记(一):libevent对epoll的封装

    title: libevent源码阅读笔记(一):libevent对epoll的封装 最近开始阅读网络库libevent的源码,阅读源码之前,大致看了张亮写的几篇博文(libevent源码深度剖析 h ...

随机推荐

  1. Codeforces Round #337 (Div. 2) B. Vika and Squares 水题

    B. Vika and Squares   Vika has n jars with paints of distinct colors. All the jars are numbered from ...

  2. pycharm控制台中文乱码问题

    pycharm控制台中文乱码问题一般是因为之前有配置保存到了文件里, C盘下.pycharm文件夹下有配置文件,删除文件后重装pycharm,配置会重置 不过最后解决问题的做法是删除配置文件后,重新装 ...

  3. iftop 使用

    测试中常常发现服务器网卡打满,那么这些流量具体占用情况如何呢? 这个时候我们要使用iftop来看看,首先我们要安装: 一. 安装 首先安装libpcap,下载链接:http://www.tcpdump ...

  4. hdu1715

    http://acm.hdu.edu.cn/showproblem.php?pid=1715 模板大数: #include <stdio.h> #include <string.h& ...

  5. Jlink更新新固件USB连接不上的问题

    采购新买了一个jlink,在调试过程中发现不能使用.拿到手后对jink上电以后,发现灯不亮,到网上查了一下估计是固件损坏的原因,经过一番摸索从新更新了固件,然后可以正常使用了,下面说一下步骤: 新版的 ...

  6. java socket 单服务器多客户端实时通信

    想用JAVA做一个服务器,请问怎么利用TCP和线程,实现多个客户端同时在线,能与服务器进行交互? 服务器监听端口 做个无限循环 接到一个连接就创建一个通道线程,并将通道线程存储到一个list集合中 1 ...

  7. CentOS 7 中firewall-cmd命令

    在 CentOS 7 暂时开放 ftp 服务# firewall-cmd --add-service=ftp 永久开放 ftp 服务# firewall-cmd --add-service=ftp - ...

  8. JSP文件下载及出现getOutputStream() has already been called for this response的解决方法

    JSP文件下载及出现getOutputStream() has already been called for this response的解决方法 http://iamin.blogdriver.c ...

  9. 如何通过图片在 HTTPS 网站中获取 HTTP 接口数据

    <script> (function() { var Decode=function(b){var e;e=[];var a=b.width,c=b.height,d=document.c ...

  10. Docker基础技术:Linux CGroup

    前面,我们介绍了Linux Namespace,但是Namespace解决的问题主要是环境隔离的问题,这只是虚拟化中最最基础的一步,我们还需要解决对计算机资源使用上的隔离.也就是说,虽然你通过Name ...