目前我的Kendo网格的分页/过滤存在问题。我的网格是非常标准的,6列,4个字面上只是从模型中吐出数据,2个显示来自模型的数据,但有一个Kendo工具提示应用了敲除绑定。我遇到的问题特别是工具提示MVVM绑定。它们可以很好地处理第一页数据,但是当您转到第二页或过滤网格时,工具提示不会出现。
我已经缩小了那里的问题,当绑定应用于页面时,新行的新html不存在。将绑定重新应用到新的html的简单问题吧?错误。这是我确定的解决方案,但我无法弄清楚如何实现它作为其生成新HTML的Kendo,我无法找到一种方法来拦截它并抓住新的html重新应用绑定。
我假设解决方案会涉及到这样的事情:
self.interceptPaging = function(e) {
var newElements = e.sender.content;
ko.applyBindingsToNode(newElements[0], null, viewModel);
}
但是我从哪里获取新元素?因此,e.sender.content会抛出有关绑定网格两次的错误。建议欢迎!
请参阅我的Fiddle了解我的问题的实例。
更新
由于jsFiddle似乎在使用knockout 3.2时遇到了问题,我将其插入Telerik的道场:Here
更新#2:解决方案
找到解决方案。在上面的数据绑定函数之上,我不得不添加一个自定义绑定处理程序来禁用后代绑定。
ko.bindingHandlers.allowBindings = {
init: function (elem, valueAccessor) {
// Let bindings proceed as normal *only if* my value is false
var shouldAllowBindings = ko.unwrap(valueAccessor());
return { controlsDescendantBindings: !shouldAllowBindings };
}
};
我将此属性添加到kendo网格div。
<div data-role="grid"
data-bind="kendoGrid: gridOptions, allowBindings: false "
style="height: 500px">
</div>
我还必须在上面的applyBindings调用之前调用ko.cleanNode。所以我的数据绑定功能看起来像:
self.dataBound = function (e){
var body = e.sender.element.find("tbody")[0];
if (body) {
ko.cleanNode(body);
ko.applyBindings(ko.dataFor(body), body);
}
};
查看更新的Telerik Dojo。
答案 0 :(得分:1)
你是对的。 Kendo在页面上引入了新元素,而淘汰赛并不知道它需要应用绑定。
您可以利用dataBound事件:
dataBound: function(){
var body = this.element.find("tbody")[0];
if (body) {
ko.applyBindings(ko.dataFor(body), body);
}}
}
我已经更新了你的小提琴。
http://jsfiddle.net/oe3nrk8f/2/
另外,看看这个问题,看看你如何修改kendo-knockout库的源代码来自动为你做这件事,但这可能有点过头了。