redmine在view中创建复杂组件

大家好

       R队今日第三弹(快夸夸我高产似母猪)!!!

      前面已经讲过定制view控件,这篇来教大家如何在view中创建复杂的组件,友情提醒:千万不要看到“复杂”两个字就走了,再复杂的组件到了R队这里都给你安排的明明白白的,下面我们进入正题

背景

        使用rails框架进行开发时,一般需要遵循MVC的模式,例如:需要实现一个用户填写自己邮箱、手机号提交到服务端入库的功能。一般用View来处理与用户交互的表单,用Controller来处理提交到服务端的请求,用Model来处理用户、手机号、邮箱等实体本身的逻辑。

        例如需要实现一个功能,对用户提交的手机号进行校验,判断是否已注册。比较好的方法是在用户的Model中提供一个方法,用于判断手机号是否重复。然后Controller中提供一个对外接口,当手机号提交到服务端时,在Controller中创建一个用户对象,并调用校验手机号的方法,来进行判断,若校验不通过,Controller再负责返回一个错误信息给View。

        只要遵循这种模式,一般后端的逻辑是相对清晰的,但是View就比较麻烦了,若想创建一个酷炫的页面效果,CSS和JS是离不开的,就会导致大量的CSS、JS、Html、Ruby四种语言混在一起,不仅可读性较差,而且容易出错。其实在Rails中,CSS、JS、Html都是可以用Ruby来控制的,本文先介绍一下如何用ruby语法来创建html组件,CSS和JS在后续的文章中继续更新。


Controller、View、以及Helper三者之间的关系

redmine在view中创建复杂组件

  • View本身其实并不是一个对象,而是可以看作是Controller执行render方法的输出。也就是说:
    • 在Controller中存在的变量或方法,在对应的View中也全部存在,可以直接调用
    • 在Controller中,Action方法产生的输出,会直接反应到对应的View中,会直接展示到页面上
  • Controller同时还可以通过require引入多个Helper模块,从而拥有执行在模块中定义的方法的能力

        结合以上两点,我们可以使用一种方式:在Helper中定义任意复杂的逻辑方法,只要此方法可以返回一个包含Html的字符串,就可以在View中用一句简单的 render_xxxx 语句,创建出一个酷炫又具有复杂逻辑的组件。