我正在使用kendo-knockout库。我创建了一个动态表,以便切换数据源。我做了一个自定义绑定,在更新事件期间,我销毁网格然后设置新选项(数据源,列,架构等)并“重新创建”网格。但是我无法重新绑定我在列中设置的模板。
var grid = $(element).data('kendoGrid');
grid.thead.remove();
grid.destroy();
---新选项
column.template = "<a data-bind=\"text: status, css: {'errorMessage': true}, click: $root.openPopup \">${status}</a>";
$scope.dataSource({
data: items,
columns: columns,
schemaModelFields: schema
});
更新期间在活页夹中
function (dataSource, element, vm) {
[...]
var gridOptions = {
columns: columns,
dataSource: {
data: data,
schema: {
model: {
fields: schemaModelFields
}
}
},
[...]
$(element).kendoGrid(gridOptions);
我希望能够从根VM调用openPopup方法。它确实正确渲染模板但绑定被破坏。
<a data-bind="text: status, css: {'errorMessage': true}, click: $root.openPopup">Not Set</a>
答案 0 :(得分:1)
我得到了一个答案...使用dataBound事件我清理节点并重新应用绑定
var gridOptions = {
columns: columns,
dataSource: {
type: 'knockout',
data: data,
schema: {
model: {
fields: schemaModelFields
}
}
},
useKOTemplates: true,
dataBound: dataBound,
preventBinding: true,
};
var grid = $(element).kendoGrid(gridOptions);
var dataBound = function () {
var body = this.element.find("tbody")[0];
if (body) {
ko.cleanNode(body);
ko.applyBindings(ko.dataFor(body), body);
}
}
这解决了我的问题,但适用于biding的上下文是来自root的VM而不是数据源项,所以在$ root.openPopup中,我得到的参数是完整的VM而不是行项。