如何在jQuery UI Dialog加载时默认触发KnockoutJS网格首行点击事件
在jQuery UI Dialog中默认高亮KnockoutJS网格首行
嘿,这个需求很好实现,咱们可以结合jQuery UI Dialog的打开事件,再复用你已经写好的行高亮逻辑就行,给你两种靠谱的方案:
方案一:直接调用现有的高亮函数
既然你已经有了WClickFunction来处理行高亮,那最直接的方式就是在Dialog打开后,手动给它传入首行的数据:
首先,调整你初始化Dialog的代码,加上open回调:
$("#griddiv").dialog({ // 这里保留你原来的Dialog配置,比如width、title这些 open: function() { // 获取绑定到网格上的ViewModel实例 var vm = ko.dataFor(this); // 拿到pList里的第一行数据 var firstRowData = vm.pList()[0]; if (firstRowData) { // 直接调用高亮函数,把首行数据传进去就行 vm.WClickFunction(firstRowData); } } });
要是你的ViewModel不是绑定在#griddiv上,你可以换成全局的VM实例,或者用ko.contextFor()来获取上下文,根据你的实际情况调整就行。
方案二:触发首行的点击事件
如果你的高亮逻辑依赖于DOM事件对象(比如需要通过event参数操作DOM元素),那可以直接找到首行的DOM元素,触发它的click事件:
同样在Dialog的open回调里处理:
$("#griddiv").dialog({ open: function() { // 加个setTimeout确保Knockout已经把pList渲染成DOM了 setTimeout(function() { // 找到tbody里的第一行tr,触发点击 $("#griddiv tbody tr:first").trigger("click"); }, 0); } });
用setTimeout是因为Knockout的foreach渲染需要一点时间,确保DOM已经生成后再触发事件,不然可能找不到元素。
小提醒
- 要确保
pList在Dialog打开的时候已经有数据哦!如果是异步加载的,那得等数据加载完成后再执行高亮逻辑(比如放在数据请求的success回调里调用WClickFunction)。 - 要是你的高亮是靠添加CSS类实现的,其实也可以直接给首行加类,但复用你已经写好的
WClickFunction会更符合代码复用的原则,也不容易出问题。
内容的提问来源于stack exchange,提问作者rkr
相关产品推荐
相关产品推荐

