Category: Develop


Workflow Refactoring

21号受邀到Razorfish上海公司做了一场主题为Workflow Refactoring分享会。主要内容是我之前总结的Workflow系列,并通过一个具体实例来演示整个过程。之所以用了重构这个字眼来引起程序员的注意,是因为很多情况下人们并不觉得要对自己既有的工作流程或者习惯做出改变。而重构的目的就是在保持结果一致的前提下,内部用更优雅更合理的方式来实现。

基本内容与旧版没有太大的改变。这大半年来用这套流程做了不少实践,做了一些规范上的调整。期间Flash和FDT都经历大的版本升级,相关的一些细节也要有所调整。所以重新更新了一下资料。此外在团队的实际推行中,针对设计师和程序员合作之间遇到得最多的问题也提出了更有针对性的解决方案。也明白了再优秀的流程也比不上前期规划+持续沟通的道理。

经验表示:

  • 多数Agency或Studio的团队已经开始用更专业的编辑器来开发代码,但是还没有遇到太多协作上的问题,或者说是没有对这些问题做出系统性的思考。这正是大家现有的工作流需要重构的地方。
  • 对于Flash网站,大多数情况下,用Gaia框架提供的功能就已经足够。Robotlegs带来的好处并不明显。
  • 使用JSFL和Ant进行自动化处理能够极大的提高工作效率,是这套方法的亮点,也是最受使用者欢迎的功能。

在Flash自带的ComboBox组件中,下拉列表部分是被加到主场景(Stage)上的。这就带来一些问题:比如ComboBox放在一个运动着的可视对象上,点开下拉列表后,这部分并不会跟随着父物体运动。如果父物体是三维层,下拉列表也不会继承上层的属性,这就会造成视觉上的问题。

下面的代码演示了一个不修改ComboBox源代码的前提下解决这个问题的小技巧。思路很简单:监听下拉列表的打开和关闭事件,动态改变dropdown对象的parent。

// cb is a ComboBox instance
 
cb.addEventListener(Event.OPEN, openHandler, false, 0, true);
cb.addEventListener(Event.CLOSE, closeHandler, false, 0, true);
 
private function openHandler(event : Event) : void
{
	// wait one frame
	addEventListener(Event.ENTER_FRAME, tick, false, 0, true);
}
 
private function closeHandler(event : Event) : void
{
	// hide dropdown
	cb.dropdown.visible = false;
 
	// add dropdown back to stage
	stage.addChild(cb.dropdown);
}
 
private function tick(event : Event) : void
{
	removeEventListener(Event.ENTER_FRAME, tick);
 
	// add dropdown to another parent
	someContainer.addChild(cb.dropdown);
	// reposition dropdown if needed
	cb.dropdown.move(cb.x, cb.y + cb.height);
	// show dropdown
	cb.dropdown.visible = true;
}

https://gist.github.com/721420

应用程序域

Application Domains 应用程序域

和安全域一样,不同安全沙箱下的SWF有着自己独立的类定义。这种在安全域下面进行划分和管理类定义(函数、接口和命名空间的定义也类似)的子域就是应用程序域。应用程序域只存在于安全域内,并且只能属于唯一的一个安全域。但是安全域可以包含多个应用程序域。

Application Domains in Security Domains
安全域内的应用程序域

虽然安全域沙箱用于保护数据安全,应用程序沙箱域用于划分定义。但是他们都用于解决定义的冲突和判断代码的继承关系。

安全域彼此之间是相互独立的,相比之下,应用程序域之间的关系则较为复杂。应用程序域通过类似于Flash中的显示列表那样的层级关系链接在一起。应用程序域可以包含任意的子域,而子域只能有一个父域。子域继承了来自父域中的定义,就像是显示列表中父对象的位置和缩放属性被子对象继承一样。

应用程序域的根节点是一个系统域,这个域包含了Flash Player API的原生定义(Array,XML,flash.display.Sprite等等)。系统域与安全域是一一对应的关系,当安全域初始化的时候这个唯一的系统域也被建立。 View full article »

Powered by KevinCao.com ©2010 | Platform: WordPress | Theme: Motion
kevincao.com