code it

Martins Tech Blog

jqGrid und "unrecognized expression # tbody:first"

In einem Projekt habe ich das jQuery-Plugin jqGrid eingesetzt, um Daten tabellarisch darzustellen. Allerdings überraschte mich das jqGrid beim Versuch, die Zeilen nach einer Spalte zu sortieren damit, dass sämtliche per JavaScript hinzugefügten Zeilen wieder entfernt wurden und sich ansonsten nicht viel tat.

Ein kurzer Blick in die Konsole zeigte, dass bei der Aktion ein Fehler geworfen wurde: unrecognized expression # tbody:first irgendwo in den Tiefen von jQuery.

Dass jQuery selbst mit hoher Wahrscheinlichkeit nicht das Problem sein kann, zeigt die Erfahrung.

Problem ist folgendes: Da ich mehrere dieser Grids auf einer Seite verwende udn diese auch noch dynamisch erzeugt werden, habe ich darauf verzichtet, meinen zugrunde liegenden Table-Elementen eine Id zu verpassen. Das Plugin aber benötigt sowohl für die Tabelle selbst als auch für die Zeilen jeweils Ids. Häufig kann man im Plugin-JavaScript Aktionen wie diese hier finden:

$("#"+$.jgrid.jqID(ts.p.id)+" tbody:first")

für den Zugriff auf die Tabelle und

$("#"+$.jgrid.jqID(t.p.id)+" tbody:first tr#"+$.jgrid.jqID(sr))

für den Zugriff auf gewisse Zeilen.

Lösung ist also, sich für jede Tabelle eine nach Möglichkeit eindeutige Id auszudenken und diese dann zu setzen.

Intellisense für eigene JavaScript-Funktionen

Seit Visual Studio 2008 gibt es die Möglichkeit, JavaScript-Funktionen so zu dokumentieren, dass auch die Intellisense in der Lage ist, Informationen anzuzeigen. Um so erstaunter bin ich jedes Mal, noch häufig auf Konstrukte wie diese hier zu stoßen:

// function that implements some magic
function DoSomething(parameter) {

}

Der Versuch ist ganz gut, aber es geht noch besser. Nachteil dieser Art der Dokumentation ist nämlich, dass Intellisense dann genau auch nur die Methodensignatur anzeigt, nicht aber nähere Informationen zur Methode.

Mit nur einer kleinen Umstellung kann man diese Unterstützung aktivieren:

function DoSomething(parameter) {
    /// <summary>
    /// function that implements some magic
    /// </summary>
    /// <param name="parameter">the dom element's id</param>

}

Was auffällt: Der Aufbau der Dokumentation ist dem was wir schon für C#-Funktionen kennen sehr ähnlich. Einziger Unterschied: In C# wird der Kommentar über die Methode geschrieben und hier in die Methode. Ab diesem Zeitpunkt ist Visual Studio in der Lage, die Informationen wie gewohnt auch schon während des Tippens anzuzeigen.

Wie schon beschrieben ähnelt der Aufbau sehr dem, was man schon von der Dokumentation in C# kennt - es sollte also keine zu große Einstiegshürden für Entwickler geben. Wer eine kurze Einführung braucht, dem sei der Blogpost von Bertrand Le Roy ans Herz gelegt.

The power of WPSC

Heute bin ich über einen interessanten Blogeintrag von Woody Windischman zum Thema Web Part Page Service Component (WPSC) gestolpert.

Die JavaScript-Funktionen von WPSC erlauben es Webparts, untereinander, mit SharePoint und mit dem Benutzer zu interagieren. Im oben genannten Eintrag integriert er eine Online-Hilfe für Webpartseiten in einem SharePoint-Wiki und bindet diese mittels F1-Tastendruck an.

Ich hab das Ganze gleich mal ausprobiert... Und was soll ich sagen?... Es funktioniert und zeigt Möglichkeiten dieser Technologie auf.

Kleiner Tipp aus den Kommentaren zum oben genannten Post: Damit sich nicht parallel zum eigenen Hilfetext auch die browsereigene Hilfe öffnet, muss die Callback-JavaScript-Funktion mit "return false;" enden.