增加一个创建表单
让我们增加一个按钮弹出创建Tutorial的表单,增加一个transition来处理输入。
想象一下页面之间的连接,就像有序图,每个页面是一个节点,定义在每个页面中的 transition 告知如何从那个页面去到另一个页面(或回到同一个页面),并且作为转换的部分,有可能会运行服务端动作或一个服务。根据UI设计需要,单个 transition 因为不同的条件以及错误情况,会有有多个响应,转换到多个页面。
首先在actions元素上添加一个transition到FindTutorial.xml页面:
<transition name="createTutorial">
<service-call name="create#tutorial.Tutorial"/>
<default-response url="."/>
</transition>
此 transition 调用 create#tutorial.Tutorial 服务,然后回到当前页面。
create#tutorial.Tutorial 服务是何方神圣?我们并没有定义类似的东西。Moqui Service Facade 为实体CRUD操作提供了一类特殊的不需要定义更不需要实现的服务。服务名由两部分组成,一个动词和一个名称,用#号分隔。只要动词是create、update、store或delete,名称是一个有效的实体名。ServiceFacade将视其为一个隐式的entity-auto服务并执行期望的操作。它是基于实体定义和传递给服务调用的参数来做的。例如,使用create动词加一个有单一主键字段的实体,如果你为那给字段传入一个值,它将使用该值,否则它将使用实体名作为序列的键来自动生成一个序列值。
下一步添加创建表单,在一个隐藏的容器(container)内,当按钮被点击时将展开。在原来的 FindTutorial.xml 页面的 form-list 元素上的 widget 元素内放入下面这些,让它出现在页面中列表表单之上:
<container-dialog id="CreateTutorialDialog" button-text="Create Tutorial">
<form-single name="CreateTutorial" transition="createTutorial">
<auto-fields-entity entity-name="tutorial.Tutorial" field-type="edit"/>
<field name="submitButton"><default-field title="Create"><submit/></default-field></field>
</form-single>
</container-dialog>
表单定义涉及的 transition 是刚才加到页面的,并且使用 field-type 为 edit 的 auto-fields-entity 元素来生成编辑字段。最后一个小细节是声明一个按钮来提交表单。这样就好了。
尝试加一条记录,并可以看到它在原来页面的列表表单中出现。