2014-06-13 14 views
6

Dies ist das erste Mal arbeiten mit Datagrids, also bitte vergeben Sie alles, was unklar ist.Implementieren eines Hyperlinks in einem Dojo-Datagrid

Ich habe JSON-Text, der in einem Dojo-Datagrid (dojox.grid.DataGrid) implementiert wird.

var jsonStore = new dojo.data.ItemFileWriteStore({ url: "xAgent.xsp"}); 
    var layout = [ 
    {cells:[ [ 
     {field:'firstname', name:'First'}, 
     {field:'lastname', name:'Last'}, 
     {field:'policy', name:'Policy'}, 
     {field:'lastaccessed', name:'Last Accessed'} 
     ] ], noscroll:false 
    } 
    ]; 

    grid = new dojox.grid.DataGrid({ 
    store: jsonStore, 
    structure: layout, 
    rowsPerPage: 50, 
    autoHeight: 50 
    }, '#{id:gridNode}'); 
grid.startup(); 

Das Gitter selbst erstellt wird völlig in Ordnung und alle Daten wie gewünscht angezeigt, aber ich würde für eines der Felder auf einer anderen Seite zu verbinden (das ‚Politik‘ Feld um genau zu sein) mag. Ich muss die Informationen in das Feld "policy" einfügen, wenn ich umadressiere, da die Policy-Nummer auf der nächsten Seite verwendet wird.

Mit anderen Worten, ich möchte, dass alle Richtlinienfelder innerhalb meiner Tabelle ihren eigenen eindeutigen externen Link haben, der die Policy-Nummer aus dem entsprechenden Feld enthalten wird. Der einfachste Weg, den ich mir vorstellen kann, ist, die Layout-Variable zu ändern, die in den Strukturparameter des DataGrids einfließt, aber es könnte einen einfacheren Weg geben. Wenn jemand irgendwelche Ideen hat, wäre ich sehr dankbar.

Vielen Dank im Voraus.

+0

Ich bin fast überzeugt, dass dies getan werden kann. Sie können ein onclick-Ereignis für das Raster erstellen und auf Daten aus der aktuellen Zeile zugreifen. Schau hier http://xcellerant.net/ und ich denke, du findest, dass Brad einen Beitrag dazu hat. Ich habe es selbst benutzt. –

Antwort

4

Sie können Formatierer verwenden, um Verknüpfungen, Dojo-Schaltflächen usw. innerhalb des Rasters zu erstellen.

Formatierer ist eine JavaScript-Funktion, die aufgerufen wird, die den Wert zurückgibt, der in der Zelle angezeigt werden soll. Der Wert aus dem Datenspeicher wird als Parameter an die Funktion übergeben. Der zurückgegebene Wert, der in die Seite eingefügt wird, kann ein beliebiges legales HTML oder sogar ein Dijit-Widget sein.

Also in Ihrem Fall

{field:'policy', name:'Policy', formatter: createLink}, 

definieren eine Formatierer Politik Spalte Dann fügen Sie die Funktion mit der notwendigen externen Link. Zum Beispiel:

function createLink(data){ 
    return ("<a href=policyinfo.jsp?policy="+data+">"+data+"</a>"); 
} 

Referenz: http://dojotoolkit.org/reference-guide/1.10/dojox/grid/DataGrid.html#id3

+0

Vielen Dank für Ihre Antwort. Gibt es eine Möglichkeit, auf den Wert zu verweisen, den "field" angibt? Mein jsonStore enthält etwas ähnliches wie "policy": "0101" und mit Ihrer Methode müsste ich irgendwie die Informationen aus dem Feld "policy" an die Funktion createLink übergeben. Ich mag diese Idee, aber wieder bin ich mit dem Problem konfrontiert, dass ich nicht sehe, wie ich das Feld referenzieren kann. Wenn das so einfach wäre wie "formatter: createLink (field.getValue())" zu sagen, dann wäre es perfekt. Weißt du einen Weg, dies zu tun? – cards

+2

@ user3739102 Ja. Der Wert aus dem Datumsspeicher wird als Parameter an die Formatierungsfunktion übergeben. In dem Beispiel ist es "Daten". Es ist nicht erforderlich, den Parameter im Layout anzugeben. Es wird implizit übergeben (?). – robin

+0

Super, es funktioniert! Du bist ein Lebensretter, vielen Dank! – cards

Verwandte Themen