2014-12-02 29 views
1

目前我的Kendo网格的分页/过滤出现问题。我的网格非常标准,6列4,从字面上只是吐出模型的数据,2显示来自模型的数据,但有一个Kendo tooltip应用敲除绑定。我遇到的问题是使用工具提示MVVM绑定。他们对第一页数据很好,但当你进入第二页或过滤网格时,工具提示不会出现。在分页时对Kendo Grid重新应用Knockout绑定

我已经缩小了这个问题的范围,当绑定应用到页面时,新行的新html不存在。简单的问题重新绑定到新的HTML权利?错误。这是我肯定的解决方案,但我不知道如何完成它作为其生成新的HTML的Kendo,我不能找出一种方法来拦截它,并抓住新的HTML重新申请绑定。

我假设的解决方案将涉及到这样的事情:

self.interceptPaging = function(e) { 
    var newElements = e.sender.content; 
    ko.applyBindingsToNode(newElements[0], null, viewModel); 
} 

但我在哪里得到新的元素来自哪里?现在,e.sender.content会引发两次绑定网格的错误。建议欢迎!

请参阅我的Fiddle了解我的问题的实际示例。

UPDATE:

至于的jsfiddle似乎具有淘汰赛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 grid 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

回答

1

你是绝对正确的。 Kendo在页面上引入了新的元素,淘汰赛不知道它需要应用绑定。

您可以利用数据绑定的事件是:

dataBound: function(){ 
    var body = this.element.find("tbody")[0]; 

    if (body) { 
     ko.applyBindings(ko.dataFor(body), body); 
    }} 
} 

我下面更新您的提琴。

http://jsfiddle.net/oe3nrk8f/2/

而且,看看这个问题,就看你怎么可以修改剑道敲除库自动为您做这个的来源,但可能是矫枉过正。

https://stackoverflow.com/a/13863191/4316646

+0

这真正伟大的作品中的jsfiddle与淘汰赛的2.2版本,但是当我把它变成我的应用程序,它运行淘汰赛的3.2版本,我得到一个“不能多次申请绑定同一个元素”错误。我在2.2中淘汰了淘汰赛,因为3.2在小提琴中给我带来了问题。我不得不去Telerik dojo来获取我在淘汰赛3.2中遇到的情况。 http://dojo.telerik.com/Ikil 有什么建议吗?一直试图找出这一个出来。 – Icestorm0141 2014-12-03 19:47:49

+0

找到解决方案。在上面的数据绑定函数的顶部,我不得不添加一个自定义绑定处理程序来禁用后代绑定。我将这个属性添加到kendo网格div中。在上面的applyBindings调用之前,我还必须调用ko.cleanNode。查看更新的Telerik Dojo。 http://dojo.telerik.com/Ikil/2 – Icestorm0141 2014-12-04 20:18:01

+0

这真的很好知道。感谢您的更新,并很高兴您对它进行了整理。 – 2014-12-04 21:04:59