[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产品安装目 ...
随机推荐
- Jquery操作常用表单元素
由于对前端的东西不是很熟练,导致jquery操作表单的东西总是忘记,每次用都要查一下,效率低下,记录下来,以便下次使用. CheckBox checkbox改变事件 $('#IsAllSearch') ...
- 通过 DBCA 工具创建Oracle数据库
DBCA 是 Oracle 提供的一款图形化界面工具,用来帮助数据库管理员快速.直观地创建数据库,避免了繁琐复杂的 SQL命令操作. 使用 DBCA创建数据库的过程如下. (1)依次 单击“开始 ”→ ...
- Node.js(二)常用的系统模块
http模块 第一章已经介绍了 node.js 的模块都可以传一个回调函数 回调函数支持两个参数 error , data let fs = require('fs'); fs.readFile( ...
- CREATE FUNCTION - 定义一个新函数
SYNOPSIS CREATE [ OR REPLACE ] FUNCTION name ( [ argtype [, ...] ] ) RETURNS rettype { LANGUAGE lang ...
- caffe LOG LOG_IF
caffe使用了glog,在caffe的solver中输出都是用的LOG和LOG_IF LOG_IF是条件输出: LOG_IF(INFO, num_cookies > ) << &q ...
- 将Jar安装到本地仓库和Jar上传到私服
举例 1. 依赖如下: <dependency> <groupId>org.quartz-scheduler.internal</groupId> <arti ...
- 面试之Spring
一.IoC IoC(Inversion of Control):控制反转(是把传统上由程序代码直接操控的对象的生成交给了容器来实现, 通过容器来实现对象组件的装配和管理.所谓"控制反转&qu ...
- 德尔福 XE5 安卓权限设置
http://delphi.org/2013/10/delphi-xe5-android-uses-permissions/ The permissions required by a Delphi ...
- torch.nn.Linear()函数的理解
import torch x = torch.randn(128, 20) # 输入的维度是(128,20)m = torch.nn.Linear(20, 30) # 20,30是指维度output ...
- JavaScript exec()方法
exec() 方法用于检索字符串中的正则表达式的匹配.返回一个数组,其中存放匹配的结果.如果未找到匹配,则返回值为 null. var str = "我今年25岁明年26岁后年27岁千年24 ...