我们知道 OOP 的编程方法是为多数开发者喜欢的.javascript 作为 OO 的语言也具有对 OOP 的支持,
但是 javascript 不同于其他的语言,javascript 里并没有 class 的概念.
我认为 javascript 在 OOP 实现上其实都是扩展的方法,因此在设计 inEdit 的时候我决定完全用扩展的方法来进行设计.因此在 inEdit 里是见不到 prototype 原型定义这种方法的,了解 inEdit 的设计方法对使用和扩展 inEdit 是很必要的.
为完成这个目标,首先我设计了
- inMixin
:混入对象,其实就是其他库里面常见的 extent 了,不过由于实现不同,就起了一个新的名字
- inCore
:提供了 javascript 编程里面常用的函数支持,比如字符串trim,数组/对象的遍历,ElementNode的遍历/style设置/属性设置等
- inQueue
:队列,我认为队列是一组顺序执行的function,因此Event也属于队列的一种,所以在设计inQueue时,把Event的处理也包括进来,对于命令式的function队列虽然也实现了,可我自己都不知道什么时候用,所以目前仅仅在理论上存在这种需求.
另外对于WYSIWYG编辑器来说,国际化支持是很必要的,因此设计了inI18N,
inEdit 就是在inCore,inQueue的基础上扩展而来的.对inI18N来说扩展这个词不合适,用inEdit 混入了 inI18N比较合适,看了代码也许大家就明白我为什么这么说了,但这样说却不会有错误:
inEdit
混入了
inCore,inQueue,
inI18N.
因为对于 javascript 编程来说Mixin混入的概念仍然不确定,我这样用了当然可以用自己的理解来定义这个词.并且从词义上这种说法也可以通过.
要全面介绍这几个对象的实现还不如直接看源代码,源代码里多数函数都做了注释.
这里仅仅介绍 inEdit 在结构上的设计.
inEdit 认为:
- 多数情况下在一个页面上不管有多少需要
WYSIWYG编辑的元素,仅仅需要一个编辑面板就够了,当然如果需要多个面板 inEdit 也是支持的.也就是说 inEdit 支持所谓的多实例
编辑.
- 一个编辑器在视觉上仅仅需要三部分组成,面板(panel),弹出层(modalPanel),实例(Instance,当然可以有多个).而inEdit在设计
modalPanel
时把它作为 panel 的子节点设计了,原因很简单某一时刻只可能有一个点击行为,不管你点的按钮在 panel 上还是
modalPanel 上,因此
modalPanel 仅仅是 panel 中的一个特殊的可以隐藏或显示的按钮组罢了.
- 经过上面的阐述该说说事件的处理了,常见的编辑器为不同的点击命令(
触发
Element)增加了各自的 Event , inEdit 事实上把所有的触发 Element 都置于 panel 下,那其实只需要对 panel 加一个 click Event,然后通过分析触发事件的 target||srcElement 就可以了, inEdit 正是把参数以 inEditButton 对象附加到这些Element 或其 parentNode 上来完成整个
触发事件的分发
- 上面说的是事件,具体到 inEdit 对象上其实具体体现到成员函数上了,
inEditButton对象中有 command 属性,inEdit 首先判断有没有与 command 同名的成员函数有的话,就调用,没有的话就当作 document.execCommand 的命令转发出去了.
- 因此 inEdit 的结构是平板式的,函数就是 inEditButton 中的command 属性,inEditButton 附身于 panel (modalPanel),inEdit 监听panel的chick事件,捕获后通过分析
target||srcElement 的
inEditButton 属性来传递命令,所有的逻辑就是这么简单.
分享到:
相关推荐
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 ...• SQLite SQLite SQLite SQLite 用作结构化的数据存储 • 多媒体支持 包括常见的音频、视频和...
2. **VLSI设计**:对于高速的乘法器设计,可以采用更复杂的电路结构,如Wallace树或者Karatsuba算法来提高计算速度和效率。 #### 数据管理 数据管理部分主要涉及如何有效地管理和控制数据流,以支持信号处理器的...
### Allegro板框设置方法详解 #### 一、导入网表及准备工作 ##### 1....在导入网表之前,通常...以上就是关于Allegro板框设置方法的详细介绍,希望能够帮助您更好地掌握Allegro的使用技巧,提升PCB设计的效率和质量。
Allegro提供了精细的元件移动与旋转选项,使设计者能够在不破坏设计整体性的情况下微调元件位置。首先,通过`Edit->Move Options Rotation Point`选择用户指定的旋转点,然后选择需要移动的组,利用`Ctrl+去除`完成...
- **注意**: 确保不影响整体结构。 **4.13 Edit/Text命令** - **描述**: 添加或编辑文本。 - **用途**: 添加注释、标记等信息。 **4.14 View/Zoom命令** - **功能**: 放大或缩小视图。 - **技巧**: 快速定位特定...
- **功能描述**:显示当前文件的方法、字段等结构。 - **应用场景**:查看当前文件的概览,便于了解整体架构。 7. **Go to a particular line number (Ctrl+G / Cmd+L)** - **功能描述**:直接跳转至指定行号。 ...
6. **编辑提示**:模板中的“Click to edit title style”提示表明你可以自定义标题样式以适应你的设计需求。通过调整字体、大小、颜色和对齐方式,确保标题与内容相协调。 7. **内容组织**:在“DiagramContents”...
每个时间点下都有提示“Easy to edit the template editor, have any questions contact Spring and Autumn in Bazhong City, Sichuan Province ads.”,这表明如果在编辑过程中遇到问题,可以联系模板的设计者——...
这种方法不仅考虑了路径本身的相似性,还考虑了路径在整体结构中的位置关系。 2. **树路径位置相似度**:引入了位置相似度的概念,用于衡量树路径在网页中的相对位置。通过这种方式,可以更全面地评估网页结构的...
这包括字体、颜色、大小和对齐方式的调整,以确保与整体设计保持一致。 6. **内容组织**:文件中的“Content 01”,“Content 02”,“Content 03”等是示例内容标签,提醒用户在实际使用时替换为自己的文本。这种...
- 数据库系统:由数据库、DBMS、应用系统、DBA(数据库管理员)和用户组成的整体。 2. 数据库系统的特点: - 数据结构化:数据以结构化的形式存储,如关系型数据库中的表格。 - 高共享性、低冗余:多个用户可以同时...
"CLICK TO EDIT TITLE STYLE" 提醒用户可以根据需要自定义标题的样式,包括字体、大小、颜色和对齐方式,确保与内容主题和整体设计保持一致。 2. **内容填充**:模板中的“ADD TEXT”提示表明用户需根据自己的需求...
在 MATLAB 中,封装子系统(或称为子模块)是一种组织和管理复杂模型的有效方法,它遵循模块化设计原则,能够提高代码的可读性和可维护性。子系统封装允许我们将独立的功能封装在一个单独的模块中,使其在Simulink...
在创建和编辑PPT演示文稿时,设计和布局是至关重要的元素,它们能有效传达信息并提升观众的观感。"594 family light ani ppt模板.ppt" 提供了一个设计精美的模板,适用于家庭主题的展示。该模板可能包含动画效果,使...
- 时间效率:预设的内容结构和设计元素减少了从零开始设计的时间,使用户可以专注于内容的准备和编辑。 - 图像版权:模板中的图像已经获得授权,仅供在PowerPoint模板内部使用,确保了合法合规性。 2. 如何自定义...
- **架构设计**: 介绍 DirectShow 的整体架构,以及各组成部分之间的关系。 ##### 2.4 Filter Graph 及其组成 - **Filter Graph**: 由多个滤镜(Filter)通过引脚(Pin)连接而成的数据处理流水线。 - **组件介绍**: ...
4. **标题样式编辑**:“Click to edit title style”提示用户可以个性化标题的字体、大小、颜色和对齐方式,以适应演示文稿的整体风格。 5. **3-D Pie Chart**:这种图表类型能更立体地呈现数据比例,增加视觉冲击...