1

我正在尝试自定义KoGrid的过滤器,以便我可以根据“从-到”逻辑过滤包含日期数据的列(可以在此处找到带有过滤器的 KoGrid 示例)。我想要的是在单击适当的过滤器字段时显示一个对话框,其中包含使用 Datepicker 的 From 和 To 输入。

var vm = {
            filterInfo: ko.observable(),
            myObsArray: arr
        };
        ko.applyBindings(vm); 
...
$("div.kgheadercell.col5").on("click", "input", function (event) {               
   $("#popup").dialog("open");
});

然而,这似乎不能正常工作,即一旦我单击文本字段,对话框就不会显示。但是,如果我尝试在 Chrome 的控制台中输入代码的最后一位,则处理程序已正确绑定,并且一旦我单击文本字段就会出现对话框。

但是,如果我尝试

$("body").on("click", "input", function (event) {               
 $("#popup").dialog("open");
});

这成功添加了处理程序,因为当我单击任何(显然)文本字段时,我能够看到对话框。

这段代码之后是否发生了一些事情,以便它删除或更改处理程序?

4

1 回答 1

1

KoGrid 在内部使用模板来管理网格的布局。有可能是:

  • 当您尝试将“点击”处理程序附加到标题字段时,网格尚未完成渲染
  • 标头的模板已重新呈现,有效地删除了您的点击处理程序

您可以选择使用自定义标题模板。这在 KoGrid 中还没有记录,但是功能在那里。<input>您可以在用作过滤器框的元素上使用单击绑定并手动设置其值:

http://jsfiddle.net/ericbarnard/hCQ7r/1/

看看我是如何doSomething通过单击过滤器将要调用的 viewModel 上的函数连接起来的<input>(在打开过滤器行之后)

于 2012-04-17T16:50:11.503 回答