gpt4 book ai didi

javascript - 剑道击倒 : re-bind column template

转载 作者:行者123 更新时间:2023-11-28 00:13:34 25 4
gpt4 key购买 nike

我正在使用 kendo-knockout 库。我创建了一个动态表,以便可以切换数据源。我做了一个自定义绑定(bind),在更新事件期间我销毁了网格,然后设置新选项(数据源、列、架构等)并“重新创建”网格。但是我无法重新绑定(bind)我在列中设置的模板。

  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
});

更新期间在 Binder 中

 function (dataSource, element, vm) {
[...]
var gridOptions = {
columns: columns,
dataSource: {
data: data,
schema: {
model: {
fields: schemaModelFields
}
}
},
[...]



$(element).kendoGrid(gridOptions);

我希望能够从根虚拟机调用 openPopup 方法。它确实正确渲染了模板,但绑定(bind)已损坏。

<a data-bind="text: status,  css: {'errorMessage': true}, click: $root.openPopup">Not Set</a>

最佳答案

我得到了这个问题的答案...使用 dataBound 事件我清理节点并重新应用绑定(bind)

        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);
}
}

这解决了我的问题,但适用于出价的上下文是来自根的虚拟机而不是数据源项,因此在 $root.openPopup 中我获得的参数是完整的虚拟机而不是行项。

关于javascript - 剑道击倒 : re-bind column template,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30657840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com