Kendo淘汰赛:重新绑定列模板

时间:2015-06-05 03:21:19

标签: javascript knockout.js binding kendo-grid

我正在使用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>

1 个答案:

答案 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而不是行项。