SwitchBoard:整合你的ExtendScript
出自9RIA.com WIKI
(英文原文: SwitchBoard:Integrating your ExtendScript )
原作者:Dr. Woohoo 翻译者:LRW
根据这份教程,你可以创建并测试一个简单的Adobe AIR应用程序。在这个应用程序中,你会把AddNewDoc.js文件整合到一个你所编写的AIR应用程序中,这个AIR程序需要通过Flex Builder MXML项目来开发。
读完这份教程,你能够:
- 将Adobe SwitchBoard SWC库添加到你的Flex Builder工程中
- 初始化SwitchBoard客户端
- 创建并设置一个com.adobe.SwitchBoard.Message实例
- 定义如何处理一个响应
- 发送消息
- 在程序结束后退出SwitchBoard
目录 |
需求
为了充分利用这篇文章,你需要以下软件和文件:
Photoshop CS4
试用 购买
Flex Builder 3
试用 购买
Adobe SwitchBoard SDK (包括用于Flex Builder的SWC)
下载
SwitchBoard runtime
下载
示例文件
switchboard_extendscript.zip (ZIP, 460K)
预备知识
你必须能够适应于在Flex Builder环境下和AIR应用程序中编写代码。对ExtendScript ToolKit做到基本熟悉将是对你有益的,但这不是必需的。你应当已经通过程序范例了解到怎样来使用SwitchBoard。
步骤
1. 下载示例文件。
2. 打开Flex Builder。
3. 选择File>Import>Flex Project。
4. 在Import project from选项下,选择Project folder,并点击Browse按钮。
5. 浏览找到/SwitchBoard/ SB_IntegrateESwithSB路径并点击Choose。
这步能使你返回到Flex Builder的Import Flex Project会话框。
6. 点击Finish按钮并把项目导入到Flex Builder中。
注意:在Flex Builder中打开SB_IntegrateESwithSB项目,你会看到一个名为src的文件夹,它包含了我们会用来构建该示例程序的基本文件。在solutions文件夹中还包含用于参考的最终源文件和增量源文件。
把SwitchBoard.swc文件导入到你项目里的libs子文件夹中
7. 在Flex Navigator Pane中单击鼠标右键,并选择Import...
8. 选择File System,然后点击Next。
9. (在右边的From Directory区域中)点击Browse
10. 在包含SwitchBoard.swc文件的文件系统中选择一个文件夹
提示:一般情况下,SwitchBoard.swc文件在SwitchBoard SDK Mac/libraries或者SwitchBoard SDK PC/libraries文件夹内。点击Select All,然后点击Finish。
注意:通过把SwitchBoard.swc文件导入到项目属性设置下的Library构建路径内而不是通过导入文件的方法,同样能够达到相同的效果。
初始化SwitchBoard客户端
11. 在第一步中,我们使用SwitchBoard来初始化SwitchBoard客户端并且创建并引用onCreationComplete方法--用来响应creationComplete事件。
<?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" title="Integrate ES with SB" height="332" showStatusBar="false" showTitleBar="true" width="320" creationComplete="onCreationComplete()" closing="onClosing()"> <mx:Script> <![CDATA[ import com.adobe.SwitchBoard.*; import flash.filesystem.*; import mx.controls.Alert; public function onCreationComplete() : void { Client.init( super.applicationID ); }
导入JS并设置一个消息实例
12. 然后嵌入先前建立的AddNewDoc.js文件。
// Embeds the AddNewDoc.js file and creates an instance of it. [Embed(source="AddNewDoc.js",mimeType="application/octet-stream")] private static var AddNewDocJS : Class;
13. 建立一个addNewDoc方法,该方法会在按钮被点击时被调用。
该方法处理字符串的构造--在这个例子中包括一段JavaScript(从技术性的角度来看它是一个ExtendScript)文件。在创建完字符串以后,它会把字符串传递给sendThruBridgeTalk方法,sendThruBridgeTalk方法会接着把字符串通过BridgeTalk传递给目标程序进行评估。
private function addNewDoc() :void {
// get the script to run (in PhotoShop)
const PhotoShopExampleScript : Object = new AddNewDocJS();
var script: String = PhotoShopExampleScript.toString();
sendThruBridgeTalk(script, 'photoshop');
}
注意:在这个实例中,我们传送给sendThruBridgeTalk方法的第二个参数'photoshop',指代目标程序并且技术上被称为应用应用说明符。当目标程序是不同的Creative Suite应用程序和不同版本的应用程序时,尤其在你使用可选版本属性时,可参考JavaScript Tools Guide CS3或CS4的特定名字和命名惯例的列表。
为了把多个CS程序设为目标程序从而利用CS程序中的特性和函数,我会在这里定义程序名称。例如,通过Adobe Illustrator,我可以用代码来获得(当前面板中的标识符或样本)长度,从而控制Swatches和Symbols库。然后我能够在Photoshop中用这些可选标识符和颜色。
14. 通过创建并配置Message对象,构建一个消息用于传送到应用程序。
你必须定义目标程序和消息主体。消息主体通常是一段在目标程序中执行的脚本,并且被打包成一个字符串,如下所示:
public function sendThruBridgeTalk( myMsg:String, target:String ): void
{
//create the Message
var message: Message = new Message();
message.body = myMsg;
message.target = target;
}
定义如何处理一个响应
要为消息处理一个响应或者要使用脚本计算后所返回的数据,你就必须在你发送消息前建立一个响应处理机制。你可以通过在一个消息对象中定义onResult回调来实现。
注意:消息回调不是必需的并且不是所有的消息激活应用程序都能实现消息回调。
默认情况下,消息主体属性中的脚本评估可导致消息的响应。目标程序可能会定义一个不同类型的响应。
当目标程序完成处理消息后它会在接收到的消息对象中寻找onResult回调。如果找到回调,目标程序会自动调用它,并把它传递给响应。响应被打包成一个字符串,这个字符串随之又被打包到一个新的消息对象的主体属性中。那个消息对象就是onResult回调函数中的参数。
例如,以下处理器处理了返回的结果,并且这个处理器位于sendThruBridgeTalk函数中:
message.onResult = function ( msg: Message ) : void
{
resultText.text = "Success!";
}
为了处理可能在脚本运行时发生的错误,你可以在sendThruBridgeTalk函数的消息对象中定义一个onError回调:
message.onError = function ( msg: Message ) : void
{
resultText.text = "Error: " + msg.body;
}
发送一条消息
15. 要发送一条消息需要调用消息主体的发送方法。
你不必定义发送消息的位置,因为目标程序已被设置在消息主体中(在目标属性中)。这行代码同样也包含于sendThruBridgeTalk函数中。
message.send();
如果目标程序不在运行,send()方法会运行目标程序。在一些实例中,消息不会被执行但会在目标程序被关闭时要求消息被再次发送。如果你把一个新的颜色发送到Illustrator的Swatches Panel中,若Illustrator是关闭着的,那Illustrator则会自动启动。然而,如果一个默认文件在程序启动时没有被自动创建,那么消息就会失败。这是由Illustrator对Swatches Panel和文件之间的相互依赖性处理机制所致。
当程序退出时,退出SwitchBoard
16. 当程序退出时,调用:
public function onClosing() : void {
Client.exit();
}
17. 打开/solutions/SB_IntegrateESwithSB-fin.mxml并且将这个文件和你的mxml文件比较,以确保所有文件都匹配。
当你确信文件的确能够匹配时,运行该文件(Run > SB_IntegrateESwithSB)。新的AIR程序会运行。
18. 点击按钮Run the magic code。
如果你没有打开Photoshop,Photoshop会启动并且最后会根据我们刚刚发送给它的代码生成一个的新的文件。

本文经Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License获得授权许可。
关于作者
Woohoo(译:严谨的幽默)博士是一位来自新墨西哥州的艺术家,设计家兼研发人员。他曾与许多客户合作,包括Adobe, Taylormade-Adidas Golf, Nike Golf和Camelbak。Woohoo从1993年开始从事数字媒体工作,并参与了许多专业项目,详见blog.drwoohoo.com和Dr. Woohoo on Flickr。