2014-08-28 3 views
7

Ich versuche, die columns.headerTemplate Funktion von Kendo UI Grid zu verwenden, um die Spaltenüberschrift anzupassen. Sie verwenden diese Funktion wie unten gezeigt und wie von this example I created gezeigt. Normalerweise verwendet das Widget bei Verwendung von Kendo UI templates die Entity in die Template-Funktion, so dass Sie die verschiedenen Eigenschaften verwenden können, um das zu rendernde HTML anzupassen.Kendo UI Grid-Spalte headerTemplate-Funktion erhält keinen Zugriff auf die Spaltendefinition

Debuggen der Kendo UI Grid-Code Ich kann sehen, dass in der _headerCellText Methode der Aufruf der Template-Funktion in ein leeres Objekt statt die Spalte übergeben, obwohl Spaltenobjekt im Geltungsbereich ist.

text = kendo.template(template, settings)({});

Gibt es einen anderen Ansatz, den ich vor dem Rückgriff auf benutzerdefinierte Spaltenkopf-Vorlagen für jede Spalte oder schlechter nehmen - jQuery Manipulation des DOM gemacht Widget?

Gibt es einen guten Grund, im Rahmen dieses Use Cases vom üblichen Template-Muster abzuweichen?

// Example kendoGrid use of column.headerTemplate 
var templateFunction = function(shouldBeColumn) { 
    // shouldBeColumn is an empty object rather than the column object 
    return "Useless object:" + kendo.stringify(shouldBeColumn); 
    }; 

$("#grid").kendoGrid({ 
    dataSource: { 
     data: products, 
     pageSize: 20 
    }, 
    height: 550, 
    scrollable: true, 
    columns: [ 
     { field: "ProductName", title: "Product Name" }, 
     { field: "UnitPrice", title: "Unit Price", headerTemplate: plainTemplate }, 
     { field: "UnitsInStock", title: "Units In Stock", headerTemplate: templateFunction } 
    ] 
}); 
+0

Haben Sie dies überprüfen, mit Telerik Unterstützung? Ihr Argument scheint konsistent zu sein: Ein leeres Argument ist nicht sehr nützlich, besser das Spaltenobjekt senden. – OnaBai

+1

Ebenso verwirrend ist, dass der eigentliche Code ist: 'if (type === FUNCTION) {text = kendo.template (Vorlage, Einstellungen) ({});' so rufen sie 'kendo.template()' nur dann auf, wenn Template ist eine Funktion, aber die Dokumentation für 'kenod.template()' gibt an, dass nur ein String ein gültiger Parameter ist. http://docs.telerik.com/kendo-ui/api/framework/kendo#methods-template Wenn dies im Open-Source-Bereich von Kendo wäre würde ich ein Problem protokollieren und eine Pull-Anfrage senden, um das zu beheben, aber Es sieht so aus, als ob du etwas zur tatsächlichen Unterstützung von Kendo anhäufen solltest. – CodingWithSpike

+0

Es ist von meinem Verständnis, dass das Verhalten, das Sie erhalten, wie beabsichtigt funktioniert. Sie möchten Ihnen das Spaltenobjekt nicht übergeben. Warum haben sie das gewählt? Idk. – Brett

Antwort

0

RE: „Gibt es einen anderen Ansatz, den ich vor dem Rückgriff auf benutzerdefinierte Spaltenkopf-Vorlagen für jede Spalte oder schlechter nehmen - jQuery Manipulation des Widgets gemacht DOM?“

eine Wrapper-Funktion aufrufen, die eine Funktion gibt, also:

function createHeaderTemplate(columnName) { 
    return function() { 
     return "Custom: " + columnName; 
    }; 
} 

...

columns: [ 
    { field: 'field', headerTemplate: createHeaderTemplate('My Field') }, 
    { field: 'field2', headerTemplate: createHeaderTemplate('My 2nd Field') } 
]