创建网格的代码:
var grid = $("#grid").kendoGrid({
dataSource: [],
columnMenu: true,
scrollable: true,
sortable: false,
filterable: true,
groupable: true,
columns: [{
field: "Id",
title: "Id",
filterable: false
}, {
field: "title",
title: "Title"
}]
}).data("kendoGrid");
我也以这种方式定制了Array的原型:
Function.prototype.method = function (name, func) {
"use strict";
if (!this.prototype[name]) {
this.prototype[name] = func;
return this;
}
};
Array.method('contains', function (object) {
return $.inArray(object, this) !== -1;
});
结果:每当我尝试打开任何列的列菜单时,我都会得到:
Uncaught TypeError: Cannot call method 'replace' of undefined
上查看错误演示
答案 0 :(得分:2)
这是kendoColumnMenu中的一个缺陷(影响版本高达2013.2.1002),导致在以下情况下出现错误:
需要更改kendoColumnMenu中的私有var“模板”:在for循环中,以下列形式添加对hasOwnProperty的检查:
'#if (columns.hasOwnProperty(col)) {#' +
完整的模板将是:
var template = '<ul>' +
'#if(sortable){#' +
'<li class="k-item k-sort-asc"><span class="k-link"><span class="k-sprite k-i-sort-asc"></span>${messages.sortAscending}</span></li>' +
'<li class="k-item k-sort-desc"><span class="k-link"><span class="k-sprite k-i-sort-desc"></span>${messages.sortDescending}</span></li>' +
'#if(showColumns || filterable){#' +
'<li class="k-separator"></li>' +
'#}#' +
'#}#' +
'#if(showColumns){#' +
'<li class="k-item k-columns-item"><span class="k-link"><span class="k-sprite k-i-columns"></span>${messages.columns}</span><ul>' +
'#for (var col in columns) {#' +
'#if (columns.hasOwnProperty(col)) {#' +
'<li><input type="checkbox" data-#=ns#field="#=columns[col].field.replace(/\"/g,"&\\#34;")#" data-#=ns#index="#=columns[col].index#"/>#=columns[col].title#</li>' +
'#}#' +
'#}#' +
'</ul></li>' +
'#if(filterable){#' +
'<li class="k-separator"></li>' +
'#}#' +
'#}#' +
'#if(filterable){#' +
'<li class="k-item k-filter-item"><span class="k-link"><span class="k-sprite k-filter"></span>${messages.filter}</span><ul>' +
'<li><div class="k-filterable"></div></li>' +
'</ul></li>' +
'#}#' +
'</ul>';
此刻解决此问题的唯一方法是编辑kendo UI的kendoColumnMenu源代码。