技术开发 频道

精通 Grails: 使用 Ajax 实现多对多关系

  调优用户界面

 

  迄今为止,m:m 讨论的焦点一直围绕如何使用类和数据库表模拟关系。我希望您能够看到,科学就是一门艺术。作为 Grails 开发人员,您可以利用许多出色的技巧来改进关系的行为和副作用。现在将焦点转移到用户界面上,您将会看到一些非常优秀的方法,使用它们调整 m:m 关系的显示。

  正如我在前一节中演示的,默认情况下,Grails 使用选择字段来显示 1:m 关系。这个起点还不错,但是您可能想在不同的环境中使用其他 HTML 控件。选择字段只显示当前值;您必须下拉该列表才能查看所有可能的值。尽管这在可用屏幕空间非常有限的情况下是非常好的选择,但您可能会觉得使所有的选项都显示出来是一种更好的解决方案。单选按钮适合于显示所有可能的选择并将选择限制为单个值。复选框显示所有可能的选择并允许选择多个选项。

  所有这些控件都适合显示数量有限的选择,但它们不能扩展到数百或数千个可能值。例如,如果我需要向最终用户提供全世界所有的航空公司(大约 650 家),没有一种标准 HTML 控件能够处理这么大的数据量。这时就需要开发人员做出判断了。对于这个应用程序,我不需要显示所有 650 家航空公司。我一生中飞过的不同航空公司可能还不到 12 家。在一些情况下,使用选择字段显示航空公司选项很可能就足够了。

  要了解 Grails 如何为 Airline 创建选择字段,请输入 grails generate-views Flight。查看一下 grails-app/views/flight/create.gsp。选择字段是使用 标记在一行代码中生成的。如果不熟悉 Grails TagLibs,请参阅 上个月的文章。清单 9 展示了使用中的 字段:

  清单 9. 使用中的 字段

<g:select optionKey="id"
          from
="${Airline.list()}"
          name
="airline.id"
          value
="${flight?.airline?.id}" ></g:select>

  在 Web 浏览器中选择 View > Source 查看这是如何呈现的,如清单 10 所示:

  清单 10. 呈现的选择字段

<select name="airline.id" id="airline.id" >
<option value="1" >UAL - United Airlines</option>
<option value="2" >DAL - Delta</option>
<option value="3" >COA - Continental</option>
</select>

   标记的 optionKey 属性指定一个 类的哪个字段将会存储在关系的另一端的多个 字段的值中。Airline 表的主键(airline.id)会作为 Flight 表的外键。在选择字段中,请注意 airline.id 是可选值(调用 Airline.toString() 方法来显示值)。如果您想要更改选项的排列顺序,可以将 GORM 调用由 Airline.list() 更改为 Airline.listOrderByIata()、 Airline.listOrderByName() 或想要使用的任何其他字段。

0
相关文章