ボタンを配置するときと同様に、HtmlRenderer を使うのだが。。。
グリッドデータJSON に、URLを持って表示させる場合は、renderer の指定に、"html" を指定する。
で良かった。
var data = [ { link:'<a href="http://google.co.jp">google</a>' } ]; var hot = new Handsontable(document.getElementById("table"), { data: data, columns:[ { data:'link', readOnly: true, renderer: 'html', }, // 省略
しかし、編集可能な表で、動的にリンクの行の他のセルの値をURLパラメータにする場合は、
renderer の指定は、グリッド描画時に、URLを書き直す必要があり、以下のようにする。
var hot = new Handsontable(document.getElementById("table"), { data: data, columns:[ { data:'link', readOnly: true, renderer: function(instance, td, row, col, prop, value, cellProperties) { Handsontable.renderers.HtmlRenderer.apply(this, arguments); // 列先頭の値をリンクパラメータに付与 var colvalue = instance.getData(row, 0)[0][0]; $(td).empty().append('<a href="/targetPage?row=' + row + '&col_0_value=' + colvalue + '">' + value + '</a>'); }, }, // 省略
このURLパラメータで指定するセルの値も、
編集した後に再度この renderer の function() が実行されて、instance より、
instance.getData(row, column) で取得する2次元配列でパラメータとして
付与したい値を取得して、リンクを描画するのである。
あるいは、以下の方が正しい方法かもしれない。
var hot = new Handsontable(document.getElementById("table"), { data: data, columns:[ { data:'link', readOnly: true, renderer: function(instance, td, row, col, prop, value, cellProperties) { var colvalue = instance.getData(row, 0)[0][0]; var linkValue = '<a href="/targetPage?row=' + row + '&col_0_value=' + colvalue + '">' + value + '</a>'; Handsontable.renderers.HtmlRenderer.apply(this, [instance, td, row, col, prop, linkValue, cellProperties]); }, }, // 省略