Получите доступ к имени поля столбца из функции columns.filterable.cell.template в Kendo
Поскольку я использую множество сеток кендо, разбросанных по всему веб-приложению, я начинаю вводить некоторый избыточный код, который доставляет мне много хлопот. Представьте себе что-то вроде:
//MVC:
...
columns.Bound(c => c.Column1).Filterable(f => f.Extra(false)
.Operators(o => o.ForString(str => str.Clear().Contains("Contains")))
.Cell(c => .ShowOperators(false).Template("column1Filter")))
.Title("Column One");
...
//JS:
function column1Filter(container) {
container.element.kendoAutoComplete({
filter: "contains",
dataTextField: "Column1",
dataValueField: "Column1",
valuePrimitive: true,
dataSource: container.dataSource
});
}
Затем, воспроизвести этот метод для каждого отдельного столбца в каждой отдельной сетке. Есть ли способ, где я могу иметь только один метод, который создает автозаполнение кендо? НАПРИМЕР:
function genericAutocompleteFilter(container) {
var columnsName = //...Meh!
container.element.kendoAutoComplete({
filter: "contains",
dataTextField: columnsName,
dataValueField: columnsName,
valuePrimitive: true,
dataSource: container.dataSource
});
}
2 ответа
Решение
Я думаю, что вы можете использовать замыкание, чтобы настроить нужную вам функцию columnName. что-то вроде:
function getAutoCompleteFunction(columnName) {
return function (container) {
container.element.kendoAutoComplete({
filter: "contains",
autoBind: false,
dataTextField: columnName,
dataValueField: columnName,
valuePrimitive: true,
dataSource: container.dataSource
})
}
и затем используйте getAutoCompleteFunction("column1"), например.
В конце концов, есть два способа сделать это. Для столбца "цвет" мы можем использовать его с кендо MVC (бритва). Хотя столбец "размер", это по предложению @massimo-franciosa.