[K/3Cloud] 理解BOS关于Enabled属性的表决器原理
通常的编程中,我们习惯:
btnOK.Enabled = true;
这个样子就会将按钮变成有效,反之亦然。但在ERP的表单中,其某个按钮或字段其有效性及其复杂,例如一个表格中某个数量单元格其有效性是这么写的:
this.View.GetEditor("FAmount",1).Enabled = 物料填了吗 && 单据是可编辑 && 单据非只读打开 && 有权限编辑 && 有此字段编辑权限;
当然,实际情况会更复杂,而我们在编写插件时,可能把他变无效很容易,但要变成有效就麻烦了,你必须枚举所有的情况,糟糕的往往我们会漏掉一些判断,更加糟糕的是这种BUG你很难察觉。
· BOS的方案
为解决这个问题,在BOS的新设计中,我们使用表决器的概念,一个控件其Enabled可以受很多的表决器影响,当如何一个表决器投反对票后,其控件就无效了,同理,所有的投票器均不反对,控件才会有效。
下面的代码演示了将某个字段的某行,加入一个表决器,并表决结果。
base.View.GetFieldEditor(key, row).GetStyle<EnableStyle>().GetOrAddItem("LockFieldService").Value = isShowOrEnable;
其中,base.View.GetFieldEditor(key, row)是获取控件对象。
GetStyle<EnableStyle>()是获取其Enabled的表决器对象。
GetOrAddItem("LockFieldService")是获取或创建一个表决器,其"LockFieldService"就是你的表决器名称,不同的表决器使用不同的名称以便区隔。
.Value就是设置你的表决器当前的值。
记得,当你这样设置其为True时,并不代表控件一定会变的有效,他还受此控件的其他表决器、此控件关联的字段、关联的行、字段关联的实体、整个表单和元数据等等一堆的因素决定。
[K/3Cloud] 理解BOS关于Enabled属性的表决器原理的更多相关文章
- 理解JAVA - 面向对象(object) - 属性,方法
理解JAVA - 面向对象(object) - 属性,方法 多态的体现: 向上造型,父类接收子类对象:向上造型: 从父类角度看不到子类独有的方法:面向对象,人类认知世界的方式:生活中每天都 ...
- 深入理解css中position属性及z-index属性
深入理解css中position属性及z-index属性 在网页设计中,position属性的使用是非常重要的.有时如果不能认识清楚这个属性,将会给我们带来很多意想不到的困难. position属性共 ...
- 深入理解JavaScript中的属性和特性
深入理解JavaScript中的属性和特性 JavaScript中属性和特性是完全不同的两个概念,这里我将根据自己所学,来深入理解JavaScript中的属性和特性. 主要内容如下: 理解JavaSc ...
- Javascript语法去控制Web控件的Enabled属性
Web控件当使用Enabled属性时,它生成html之后会变成了disabled了.我们为了能够在javascript去控制控件的禁用与启用,得从这个disabled入手.如:
- 面向对象的程序设计(二)理解各种方法和属性typeof、instanceof、constructor、prototype、__proto__、isPrototypeOf、hasOwnProperty
//理解各种方法和属性typeof.instanceof.constructor.prototype.__proto__.isPrototypeOf.hasOwnProperty. //1.typeo ...
- 半深入理解CSS3 object-position/object-fit属性
半深入理解CSS3 object-position/object-fit属性 转载:https://www.zhangxinxu.com/wordpress/2015/03/css3-object-p ...
- u3d中刚体与碰撞体的理解以及is Trigger属性的意义
刚体:个人理解就是具有物理属性(如:质量),接受物理作用(如:重力)的组件. 碰撞体:个人理解就是计算碰撞后的物理量(如:弹力). 刚体与碰撞体的关系:个人理解判断碰撞体就是需要计算力,如果碰撞的物体 ...
- 理解clear:both属性(转)
理解clear:both属性 在前端开发布局中,经常会被float这个属性搞晕,尤其是新手 CSS 的 Float(浮动),会使元素向左或向右移动,其周围的元素也会重新排列.Float(浮动),往往是 ...
- K/3Cloud二次开发基于WebDev附加进程调试
大部分人在进行K/3cloud二次开发插件的调试时,选择的是附加IIS进程w3wp调试,本文给大家介绍一下基于WebDev附加进程调试,不用重启iis. 步骤如下: 1)拷贝K/3cloud产品安装目 ...
随机推荐
- 转】RMySQL数据库编程指南
原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/2/ 感谢! Posted: Sep 24, 2013 Ta ...
- HttpServletRequest对象,自己学习的心得。
1. HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过Http超文本传输协议访问服务器时,Http请求头中的所有信息都封装在这个对象中, ...
- poj2886 Who Gets the Most Candies?
思路: 先打反素数表,即可确定因子最多的那个数.然后模拟踢人的过程确定对应的人名.模拟的过程使用线段树优化加速. 实现: #include <cstdio> #include <cs ...
- Rxjava2的学习与总结
博客地址:https://luhaoaimama1.github.io/2017/07/31/rxjava/
- SQL优化基础 使用索引(一个小例子)
按照本文操作和体会,会对sql优化有个基本最简单的了解,其他深入还需要更多资料和实践的学习: 1. 建表: 复制代码代码如下: create table site_user ( id int IDEN ...
- 使用迅为iTOP-iMX6开发板-uboot-修改默认环境变量
iTOP-iMX6 开发板烧写好之后,默认是 android 系统 9.7 寸屏幕的系统参数和屏幕参数.如下图.本文档主要介绍如何修改默认启动参数. 1. 重要的环境变量比较重要的环境变量或者说经常使 ...
- [安卓开发板]迅为IMX6 四核Android开发板
工业级核心板-Android开发板 10层高速PCB设计,充分保证电磁兼容 处理器:开发板默认是四核商业扩展级芯片,可根据用户需求更换单核.双核.工业级.汽车级处理器,批量更省成本. 扩展引脚:320 ...
- Leetcode_638.Shopping Offers
https://leetcode.com/problems/shopping-offers/ In LeetCode Store, there are some kinds of items to s ...
- HTTP的工作原理
客户机与服务器建立连接后,发送一个请求给服务器,请求格式为:统一资源标识符.协议版本号.服务器收到请求的信息(包括请求行,请求头,请求体).服务器接收到请求后,给予相应的响应信息,格式为一个状态行(包 ...
- Timer时钟(之一)
using System.Timers; static void Main(string[] args) { ThreadingTimer(); DateTime a = DateTime.Now; ...