基本特性
Action是一个动作控件,通常我们会将一段JS脚本定义在Action中,之后再用相关控件的action属性绑定这个Action控件。
通过这种方式将控件与动作的代码分离,从而提高页面的重构能力。另外Action控件还支持热键功能,后面再详细介绍。
以sample-center中的Hello World范例举例说明,HelloWorld.view.xml定义如下:
<?xml version="1.0" encoding="UTF-8"?> <ViewConfig> <View layout="padding:20" title="HelloWorld"> <Button caption="Greeting from Dorado7 ..."> <ClientEvent name="onClick">dorado.MessageBox.alert("Hello World!");</ClientEvent> </Button> </View> </ViewConfig>
如果改为action方式,则代码调整如下:
<?xml version="1.0" encoding="UTF-8"?> <ViewConfig> <View layout="padding:20" title="HelloWorld"> <Action id="actionHelloWorld"> <ClientEvent name="onExecute">dorado.MessageBox.alert("Hello World!");</ClientEvent> </Action> <Button caption="Greeting from Dorado7 ..."> <Property name="action">actionHelloWorld</Property> </Button> </View> </ViewConfig>
在上面的代码中我们增加了一个Action控件,并将Button的onClick的JS脚本调整到Action的onExecute事件中,同时设置Button的action属性为actionHelloWorld,与Action绑定。
IDE设计视图:
通过这种方式开发的代码,在后期维护中能带来便利性:如果发生页面布局和显示元素的调整,而基本逻辑不变的情况下,Action代码能最大程度的保持稳定,从而提高重构的质量。举例:用户提出变更需求,"希望原先通过Button触发Hello World的提示信息功能调整为通过菜单选择弹出",则我们可以按如下的方式修改代码:
<?xml version="1.0" encoding="UTF-8"?> <ViewConfig> <View layout="padding:20" title="HelloWorld"> <Action id="actionHelloWorld"> <ClientEvent name="onExecute">dorado.MessageBox.alert("Hello World!");</ClientEvent> </Action> <Menu id="menu1"> <MenuItem> <Property name="caption">Greeting from Dorado7 ...</Property> <Property name="action">actionHelloWorld</Property> </MenuItem> </Menu> </View> </ViewConfig>
上面我们仅仅将Button控件调整为Menu控件,并在对应的MenuItem上设置action属性。Action自身的代码未做任何变动。
IDE设计视图:
由于改动的范围小,因此改动后页面测试出问题的可能性也小。从而提高了页面重构的质量。
其它属性详细说明
async异步执行机制
与HelloWorld范例直接定义在Button的onClick事件不一样的地方是,Action默认采用异步执行。
actionHelloWorld.execute();//execute为Action执行的基本方法 alert(1);
如上面的代码并不能保证alert(1)执行的时候actionHelloWorld已经执行结束。
当然了,如果你希望它依然以同步方式执行,则可以调整async属性为false:
caption
Action支持caption属性设定,其它控件如果是通过action属性与这个Action关联的,默认会将Action的caption做为自身的caption,例如:
<?xml version="1.0" encoding="UTF-8"?> <ViewConfig> <View layout="padding:20" title="HelloWorld"> <Action id="actionHelloWorld"> <ClientEvent name="onExecute">dorado.MessageBox.alert("Hello World!");</ClientEvent> <Property name="caption">Greeting from Dorado7 ...</Property> </Action> <Button> <Property name="action">actionHelloWorld</Property> </Button> </View> </ViewConfig>
上面范例中的Button控件并未定义caption属性,但是系统运行时会自动的将绑定的action控件的caption属性作为自身的caption。
icon,iconClass,tip,disabled
这几个属性的含义与Control控件中的含义一致,只是与caption属性类似,它们都具有传导作用,最终会作用到绑定这个Action控件的的控件上,当然这个控件本身要支持相关的属性才有意义。
confirmMessage
执行之前的确认信息,如:
这样执行这个Action时就会有确认信息:
如果选择否,就会终止Action的执行。
executingMessage
通过executingMessage设置执行时的提示信息,通常情况下只有比较耗时的Action才需要做这个属性的配置,这样能在Action执行的过程中给用户一个友好的提示信息。
hotKey
通过这个属性配置系统热键,例如如果希望热键是"ctrl+1",则可以配置:
可以支持的热键类型有:
modal
这个属性只有在async属性为true情况下才有意义,它用于控制async为true情况下,如果当前执行的Action为一个耗时的动作,在一次Action调用未结束前,就可以禁止下次一Action的执行。如果再次执行系统会有如下的提示信息,并阻止Action新的执行动作:
parameter
参数集合,通常作为action执行的参数,尤其是在Ajax请求时这个集合都用于初始化远程调用请求的参数。
parameter可以是一个String也可以是一个JSON,如:
字符串
action.set("parameter", "B01");
JSON
action.set("parameter", { "id": "B01", "name": "安林", "deptId": "D1", "salary": 6725.5 });
复杂JSON
action.set("parameter", { "id": "B01", "name": "安林", "deptId": "D1", "salary": 6725.5, "address":[{ "tel": "63212222", "address": "杨高路1xxx号" },{ "tel": "63213333", "address": "浦东南路1xxx号" }] });
successMessage
Action执行结束之后的提示信息,如:
执行效果图(注意右下角的系统通知):
returnValue
returnValue作为Action执行结果的返回值而提供的存储属性,这个属性在AjaxAction或UpdateAction控件的使用中经常会用到。在Ajax请求中会自动将方法的返回值存储到returnValue中,这样我们就可以在Action执行结束后通过这个属性获取返回值。
基本使用参考:http://bsdn.org/projects/dorado7/deploy/sample-center/com.bstek.dorado.sample.Main.d#4900
Attachments:
MenuItemAction.png (image/png)
ActionAsyncFalse.PNG (image/png)
ActionConfirmMessage.PNG (image/png)
ActionConfirmMessagePreview.PNG (image/png)
ActionSuccessMessage.PNG (image/png)
ActionSuccessMessagePreview.PNG (image/png)
ActionHotKey.PNG (image/png)
ActionHotKeyList.PNG (image/png)
ErrorCallDisabledAction.PNG (image/png)