接上篇, 接着学习 kityminder.
== core/keyreceiver.js ==
extend class Minder {
init-hook(): 构造时设置选项, 侦听 'paperrender' 事件, 以调用 _initKeyReceiver()
_initKeyReceiver(): 创建 DOM 元素 <input class='km-receiver'>, 添加到容器 <div> 中.
在此 <input> 上侦听 keydown, keyup, keypress 等多个事件, 然后转给 minder 对象处理.
看起来似乎是用于专门接收 key 事件的, 也许容器不方便接收 key 事件?
事件 on_focus(): 设置上面的 <input> 为 focus.
似乎是将 <div> 的 focus,blur 同步给 <input>.
}
== core/module.js ==
闭包变量: _modules = {}, 注释为已注册的模块.
对外提供函数 Module.register(name, module): 注册一个模块.
现在对什么是模块的概念不太清晰, 另 seajs 也是加载模块, 那么有区别?
extend class Minder { // 注释: 模块声明周期维护.
init-hook(): 调用 _initModules()
_initModules(): 某种(预先?)模块加载机制, 可能先要注册模块, 然后这里在 minder 构造时完成一些加载工作.
还涉及 command, event, renderer, shortcut 等等, 稍后细研究吧.
_garbage(): 删掉所有子节点, 等于清空文档?
destroy(): 清空文档, for-each(modules).destroy(this)
reset(): 清空, for-each(modules).reset(this); 相当于每模块提供 destroy, reset 方法可被调用.
}
实际查看了一下, 在 minder 对象中有一个 _modules{}, 里面有 Arrange, Clipboard, Connect, ...
大约 30 个模块? ._query 为 null, ._rendererClasses 有 left,right,top 等几个. ._commands 前面
遇到过.
模块看起来是一种扩展功能的机制, 稍后需要更深入看看.
== core/readonly.js : 只读模式支持 ==
extend class Minder {
init-hook(): 如果选项有 readonly, 则设置为 disabled.
disable(): 禁用命令. 对命令对象的 query 方法包装