2014-06-13 34 views
6

Questa è la prima volta che lavoro con i datagrids, quindi per favore perdona tutto ciò che non è chiaro.Implementazione di un collegamento ipertestuale all'interno di un datagrid dojo

Ho un testo JSON che viene implementato in un dojo datagrid (dojox.grid.DataGrid).

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(); 

La griglia stesso viene creato perfettamente bene e tutti i dati viene visualizzato, se lo desideri, ma vorrei per uno dei campi (il campo 'politica' per essere precisi) Per creare un collegamento verso un'altra pagina. Devo includere le informazioni all'interno del campo "politica" quando reindirizzamento poiché il numero della politica verrà utilizzato nella pagina successiva.

In altre parole, voglio che tutti i campi della politica all'interno della tabella abbiano il proprio collegamento esterno univoco che conterrà il numero della politica dal rispettivo campo. Il modo più semplice che posso pensare di farlo è modificando la variabile di layout che alimenta il parametro della struttura di DataGrid, ma potrebbe esserci un modo più semplice. Se qualcuno ha qualche idea sarei molto grato.

Grazie in anticipo.

+0

Sono quasi positivo che questo può essere fatto. È possibile creare un evento onclick per la griglia e accedere ai dati dalla riga corrente. Guardate qui http://xcellerant.net/ e penso che scopriate che Brad ha un post su questo. L'ho usato io stesso. –

risposta

4

È possibile utilizzare il formattatore per creare collegamenti, pulsanti dojo ecc. All'interno della griglia.

Formatter è una funzione JavaScript che restituisce il valore da visualizzare nella cella. Il valore dall'archivio dati viene passato come parametro alla funzione. Il valore restituito che viene inserito nella pagina può essere qualsiasi HTML legale o anche un widget di dijit.

Quindi nel tuo caso, aggiungere un formattatore di colonna di politica

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

Poi definire la funzione con necessaria link esterno. Per esempio:

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

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

+0

Grazie mille per la risposta. C'è un modo per fare riferimento al valore che "campo" specificherà? Il mio jsonStore include qualcosa di simile a "policy": "0101" e quindi usando il tuo metodo avrei bisogno di ottenere in qualche modo le informazioni dal campo "policy" alla funzione createLink. Mi piace questa idea, ma di nuovo mi trovo di fronte al problema che non vedo come posso fare riferimento al campo. Se fosse semplice come dire "formattatore: createLink (field.getValue())" allora sarebbe perfetto. Sai di un modo per farlo? – cards

+2

@ user3739102 Sì. Il valore dall'archivio di date viene passato come parametro alla funzione di formattazione. Nell'esempio è 'data'. Non è necessario specificare il parametro nel layout. Sarà passato implicitamente (?). – robin

+0

Fantastico, funziona! Sei un risparmiatore di vita, grazie mille! – cards