Dorado 9 : Action(DCUG)

基本特性

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(&quot;Hello World!&quot;);</ClientEvent>
      <Property name="caption">Greeting from Dorado7 ...</Property>
    </Action>
    <Button>
      <Property name="action">actionHelloWorld</Property>
    </Button>
  </View>
</ViewConfig>

上面范例中的Button控件并未定义caption属性,但是系统运行时会自动的将绑定的action控件的caption属性作为自身的caption。

如果某个绑定Action控件的控件设置了自身的caption属性,则控件自身的caption属性的优先级大于Action的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