jQuery MiniUI

 找回密码
 立即注册
查看: 2189|回复: 2
打印 上一主题 下一主题

miniui 不支持事件触发的解决方案 [复制链接]

Rank: 3Rank: 3

跳转到指定楼层
楼主
发表于 2014-11-27 13:43:57 |只看该作者 |倒序浏览
miniui 支持注册 valuechanged 事件, 但是不支持 trigger 这个事件.
我的解决方案是, 把事件处理函数 foo() 分别注册给 miniui 和 jQuery, 这样能够支持以下2个场景:
1. 用户手工操作控件, 会通过 miniui 触发事件处理函数 foo()
2. 用代码 trigger, 会通过 jQuery 触发事件处理函数 foo()

参考代码如下:
var el = mini.get("abc");

// 注册给 miniui
el.on("valuechanged", foo);
// 注册给 jQuery
$("#abc").bind("change", foo);

function foo(){
    alert("被触发")
}

// 用代码触发
$("#abc").trigger("change");

版主们总不理解我为什么要 trigger change, 而不是直接调用 foo() 函数
我再解释一次, 我做的是开发平台, 我不知道项目组在控件上注册了哪些函数,
我要做是 trigger 控件的事件, 通知值发生了变化.
也就是说, 项目组负责注册事件, 平台负责 trigger 事件

希望普加能够给出更好的解决方案.

Rank: 9Rank: 9Rank: 9

沙发
发表于 2014-11-27 13:54:55 |只看该作者
1.valuechanged是一个使用频率很高的事件,你可以用tb.doValueChanged()来激发事件,不用关心事件对象的参数,内部已经处理好。

2.miniui的控件对象有fire(type, event) 方法,但是此方法一般是内部使用,开发者不需要直接使用。
  当激发一个事件时,事件对象会有很多属性,如果开发者外部激发,你其实是无法给全属性的,这样导致事件对象属性的描述与实际不符,会造成问题。
  所以不建议开发者直接使用fire方法来激发事件

Rank: 3Rank: 3

板凳
发表于 2014-11-27 14:18:16 |只看该作者
fcrong 发表于 2014-11-27 13:54
1.valuechanged是一个使用频率很高的事件,你可以用tb.doValueChanged()来激发事件,不用关心事件对象的参 ...

// 以下代码测试通过, 感谢 fcrong
var el = mini.get("abc");

el.fire("valuechanged");
el.doValueChanged();

Archiver|普加软件

GMT+8, 2024-11-6 15:24 , Processed in 1.052438 second(s), 10 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部