对自定义事件作出反应的更好方式
A better way to react to custom events
我正在构建一个自包含的jquery ui组件,我想给任何使用该组件的人足够的控制权。例如,表单是我的组件的重要组成部分,我的组件有一些内置的表单验证,但我为用户提供了禁用内置验证的选项。我希望他们能够在此基础上进行自己的表单验证。
因此,当点击表单提交按钮时,我会触发一个自定义事件并检查一个布尔值。
this.element.trigger('customEvent');
if(canContinue) { ...
默认情况下,布尔值为true,但我认为用户可以监听我的customEvent
,然后进行验证,如果验证失败,请将布尔值切换为false,这样表单就不会提交。
这是有效的。
然而,它感觉像是被黑客攻击在一起,我不确定我是以标准的还是可接受的方式来做这件事。Javascript或JQuery中有什么东西可以让我更好地运行这种逻辑吗?
是的,使用triggerHandler方法可以很容易地做到这一点:
var handlerResult = this.element.triggerHandler("customEvent");
if (handlerResult || typeof handlerResult == "undefined") {
alert("Success!");
}
要取消,用户所要做的就是返回false。
样品:http://jsfiddle.net/7B2Kw/1/
您可以实现策略设计模式,将验证作为默认策略来实现,并让用户实现自定义策略。用户可以使用其他验证策略配置您的组件(例如,将其作为配置属性之一传递,或在组件实例化后设置相关属性)。下面你可以找到一个例子:
$(function() {
$.widget( "custom.mycomponent", {
options: {
validate: null
},
_validate: function() {
return true;
},
_create: function() {
this.options.validate = this.options.validate || this._validate;
var that = this;
this.element.on('keypress', function() {
if(that.option('validate')()) {
this.style.backgroundColor = 'green';
} else {
this.style.backgroundColor = 'red';
}
});
},
_setOptions: function() {
this._superApply( arguments );
},
_setOption: function(key, value) {
switch(key) {
case 'validate':
if(typeof value !== 'function') return;
}
this._super( key, value );
}
});
// Instantiate with default options
$('#my-component1').mycomponent();
// Pass another validation strategy
$('#my-component2').mycomponent({validate: function() {return false;}});
});
行动中的榜样http://jsbin.com/inavur/4/edit
相关文章:
- 您有更好的动态方式来缩短复杂的代码jquery吗
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- Javascript数学不起作用,更好的方式来执行操作
- jquery悬停后恢复到原始图像是更好的方式
- 在创建 toLowerCase 函数时,一种方式比另一种方式更好
- 可能是更好的方式来编码这个棘手的切换按钮
- 哪种方式在Javascript,字符串连接或数组中更好
- 我正在设置计时器,但我以错误的方式进行.所以请给我更好的方法来做到这一点
- 用Javascript更好的方式编写这个动画
- 如何通过引用传递超时?或者更好的实施方式
- 对自定义事件作出反应的更好方式
- Backbone js路由器-组织视图的更好方式
- 如果一个函数的大部分执行是以输入为条件的,那么下面哪一种是更好的实现方式
- 实时更新的Facebook页面点赞数-->任何更好的方式
- 更好的处理方式'这'在Javascript的闭包中
- 更好的方式导入JavaScript和CSS文件使用CDN或从本地机器
- 组合优于继承,这是向视图添加额外功能而不诉诸继承的更好方式
- 在我的例子中,这是显示动态单选按钮的更好方式
- 写回退选择器的更好方式
- 子对象访问父对象的更好方式