自定义控件简单到令人发指的开发历程

楼主
我是社区第55902位番薯,欢迎点我头像关注我哦~
本帖最后由 迈达斯之手 于 2016-12-6 13:15 编辑

这个控件的开发来源是问题求助里面的帖子
传送门 ----》》》》 http://bbs.fanruan.com/thread-83243-1-1.html
插件已经在帖子的楼层里面提供了下载,下面就说一下开发的过程吧
第一步:实例化一个注册控件的接口
给四个信息 我们的控件类,界面类,图标路径,控件类型名字
  1. package com.hg.free.plugin.customcombo.param;

  2. import com.fr.design.designer.creator.XComboBox;
  3. import com.fr.design.fun.impl.AbstractParameterWidgetOptionProvider;
  4. import com.fr.form.ui.Widget;

  5. public class WidgetRegister extends AbstractParameterWidgetOptionProvider {

  6.         @Override
  7.         public Class<? extends Widget> classForWidget() {
  8.                 return CustomComboBox.class;
  9.         }
  10.         
  11.         @Override
  12.         public Class<?> appearanceForWidget() {
  13.                 return XComboBox.class;
  14.         }

  15.         @Override
  16.         public String iconPathForWidget() {
  17.                 return "/com/fr/web/images/combobox.png";
  18.         }

  19.         @Override
  20.         public String nameForWidget() {
  21.                 return "自定义下拉框";
  22.         }

  23. }
复制代码
第二步:重写我们的控件类‘
  1. package com.hg.free.plugin.customcombo.param;

  2. import com.fr.form.ui.ComboBox;
  3. import com.fr.ui.DataFilter;

  4. public class CustomComboBox extends ComboBox {

  5.         private static final long serialVersionUID = 7169771062153345236L;
  6.         
  7.         @Override
  8.         public String getXType() {
  9.         return "customcombo";
  10.     }
  11.         
  12.         @Override
  13.         protected DataFilter createDataFilter() {
  14.         return new CustomComboBoxDataFilter();
  15.     }
  16. }
复制代码
因为是要改变过滤的方式那么就重写一个过滤器喽
  1. package com.hg.free.plugin.customcombo.param;

  2. import com.fr.form.ui.ComboBoxDataFilter;

  3. public class CustomComboBoxDataFilter extends ComboBoxDataFilter {
  4.         @Override
  5.         public boolean isMatch(String txt, String filter) {
  6.                 if(null==txt && null!=filter)return false;
  7.                 if(null==txt && null==filter)return true;
  8.                 return txt.indexOf(filter)!=-1;
  9.         }
  10. }
复制代码
第三步:继承前端控件JS
  1. ;
  2. (function($){
  3.         FR.CustomComboBoxEditor = FR.extend(FR.ComboBoxEditor, {
  4.                 _init: function () {
  5.                         FR.CustomComboBoxEditor.superclass._init.apply(this, arguments);
  6.                 }
  7.         });
  8.         $.shortcut("customcombo", FR.CustomComboBoxEditor);
  9. })(jQuery);
复制代码
好了~以上就是全部的代码开发~然后写个xml用ant打包成插件就可以了,
是不是简单到令人发指~{:5_147:}


=======================================小丁丁分割线=================================================
解释一下代码吧:
首先来看我们的JS~这段代码是什么意思呢?
就是我定义了一个控件类型为CustomComboBoxEditor的控件,他继承了ComboBoxEditor的全部方法和属性,并且我把新定义的控件类型的标记声明为customcombo
,这个标记有啥用勒,其他用途就不说了,单单说在这里的用途~就是JAVA 本身是不能让前端取生成什么控件的~而是通过告诉前端一个配置~前端的JS引擎(姑且这么称呼他吧)~根据这个配置去执行对应的脚本生成对应的dom样式之类的~shortcut你就这么理解~后台返回一个配置是要生成customcombo这个控件~那么它就像一个map一样找到了对应的键值FR.CustomComboBoxEditor~然后把该控件的配置丢到这个方法里面去执行。就生成我们的控件了~

因为这个例子中并没有对前端有任何修改的要求~所以就没做任何改动~下面看后台
我们这个例子是要修改模糊匹配的方式~
那么原来控件匹配的机制是怎么搞的勒~
是这样的:假设我是一个老板(妈蛋也只能假设一下了{:8_219:})~现在我想了解一份纸质合同的细节~但是公司有一大坨纸质合同我怎么找呢~当然是请个秘书了(美女最好{:8_208:})~我告诉她我要的合同大概是有些什么信息~然后她去找出来把最后找到的合同给我就可以了~
我们这里控件ComboBox就是老板,ComboBoxDataFilter就是秘书~就是这么个意思~这里每个秘书肯定都有自己找合同的一套方法~以前那个秘书是只要有点相关的就都找出来了~新来的这个秘书是只找老板提示的信息匹配到的合同~查找匹配的方法就是isMatch

这个代码就是这样的~代码的开发其实只要仔细分析就能够映射到现实生活中的很多事务处理上面~因为代码也是人设计的~逻辑总逃脱不了人处理事务的思维~




分享扩散:
参与人数 +3 F豆 +2 +10 F币 +10 理由
luker + 1 感谢分享
windy_gui + 1 很给力!
传说哥 + 10 + 10 一言不合就开发个控件~~

查看全部评分

沙发
发表于 2016-12-6 12:40:16
绝对不是大神说的简单。看不懂的飘过。
板凳
发表于 2016-12-6 12:57:48
{:8_209:}简单到我看不懂,点个赞给个精华走人
地板
发表于 2016-12-6 13:06:39
我也就看看~~~~
5楼
发表于 2016-12-6 13:08:45
看不懂的飘过,不学点JAVA,是不是就混不下去了。
6楼
发表于 2016-12-6 13:10:24
{:5_133:}
7楼
发表于 2016-12-6 13:14:53
虽然看不懂,但是觉得很66
8楼
发表于 2016-12-6 15:17:47


向大神学习了
9楼
发表于 2016-12-7 09:49:18
大神,請問儲存格中的"控件設置",有機會用您的--<自定義控件>嗎?





10楼
发表于 2016-12-8 08:44:57
膜拜大神 ,正在学习中
11楼
发表于 2016-12-8 08:52:39
来自手机
之前自己写了几个插件。。
12楼
发表于 2016-12-9 01:24:16
类的继承玩的好6.。。。我的java基础都快忘完了
13楼
发表于 2016-12-10 09:03:10
看来不学点JAVA,实在混不下去
14楼
发表于 2016-12-10 10:29:41
好帖,必须支持一下!
15楼
发表于 2017-3-3 11:40:12
{:6_151:}突然好想把丢的书捡回来
16楼
发表于 2017-4-22 09:47:06
牛,向大神学习
17楼
发表于 2017-10-11 17:40:31
已经没脸看java了
18楼
发表于 2018-8-1 11:28:41
js文件如何命名啊?
19楼
发表于 2018-8-1 11:33:48
taylor 发表于 2018-8-1 11:28
js文件如何命名啊?

任意都可以~要通过接口引入到report或者core下面~具体可以参见官方的二开接口介绍文档~说得很详细~
20楼
发表于 2018-8-2 13:13:26
厉害了我的哥
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

19回帖数 3关注人数 10007浏览人数
最后回复于:2018-8-2 13:13

返回顶部 返回列表