将状态从控件发送到框架
Send status from controls to framework
我有UI控件继承自抽象控件,在抽象控件中我有一个方法每个控件都应该扩展它叫做isValid返回真/假我需要(作为框架)要知道是否将其标记为红色(非有效情况),在这种情况下我应该使用一个设计模式来帮助我解决这个问题,或者我应该使用哪种方法?
如果你是在纯Javascript中开发(即没有React或Angular或jQuery),我会使用现有的DOM元素中可用的Observer Pattern来更新更改。
抽象部分:// Create the basic AbstractControl class.
var AbstractControl = function() {
}
// Virtual methods.
AbstractControl.prototype.isValid = function() {
throw new Error('Not implemented.')
}
AbstractControl.prototype.paintGreen = function() {
// Valid case.
throw new Error('Not implemented.')
}
AbstractControl.prototype.paintRed = function() {
// Invalid case.
throw new Error('Not implemented.')
}
// Function Update verifies the validity of the control and calls
// the valid or invalid case accordingly.
AbstractControl.prototype.update = function() {
if (this.isValid()) {
this.paintGreen();
} else {
this.paintRed();
}
}
和一个具体的控制类示例:
// Class for an email input text field, receives a DOM element.
var EmailField = function(element) {
AbstractControl.call(this, AbstractControl);
this.element = element;
// Listens for change events on the element and updates
// the valid/invalid status.
this.element.addEventListener("change", this.update.bind(this));
}
// Setup inheritance.
EmailField.prototype = Object.create(AbstractControl.prototype);
EmailField.prototype.constructor = EmailField;
// Implement virtual methods.
EmailField.prototype.isValid = function() {
return this.element.value.indexOf("@") >= 0;
}
EmailField.prototype.paintGreen = function() {
alert("Email correct. Proceed.")
}
EmailField.prototype.paintRed = function() {
alert("Email Incorrect! May not proceed.")
}
最终用途:new EmailField(document.getElementById("emailfield"));
根据字段内容的变化,它将alert
。您可以更改alert
来代替元素的颜色(如函数名所示),或显示一些图标或工具提示。
JSFiddle: https://jsfiddle.net/surj64vy/(使用更多事件实时捕获更改,并绘制字段而不是发出警报)
相关文章:
- 音频控件在mouseover上显示,在mouseout上淡出
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- Windows形成web浏览器控件和Javascript更改的DOM
- 如何将javascript事件从web浏览器wpf控件发送到wpf的c#代码
- 如何更改文本框控件的不透明度值
- 所有控件的组合框
- 创建一个方法,通过一个窗口进行迭代并获取Titanium中的所有控件
- 在angularjs中创建自定义控件的推荐方法
- 自定义控件中的双向绑定在SAPUI5中不起作用
- 如何在ASP中为用户控件添加Javascript对象网
- Dynamics 2016内部部署Crm客户端脚本.选项集控件类型缺少方法
- 从服务器获取数据并在选择控件中使用ng选项无法显示选项
- 在HTML5画布上添加按钮和控件
- 隐藏HTML5视频控件
- 向ASP控件添加自定义事件
- 如何使用 kendo ui 的控件和框架使每个列表项可拖动
- Phaser框架中虚拟控件类的问题
- 将状态从控件发送到框架
- 是否有一个同时适用于iOS和Android的原生控件javascript框架?