Handsontable は、DataSchema を定義しておけば
行挿入(row_above)で生成される行の初期値が定義した値になる。
DataSchema での定義は、Handsontable インスタンス生成のタイミングで決まる。
後からこれを変更するなんてナンセンスである。
また、DataSchema で、function() 関数を定義してもインスタンス生成でその関数が
実行されることを留意しなければならない
afterCreateRow イベントとの併用
<script src="https://momentjs.com/downloads/moment-with-locales.js"></script>
moment.locale('ja'); var hot = new Handsontable(document.getElementById("table"), { data: data, language: 'ja-JP', columns:[ { data:'item', type: 'text' }, { data:'price', type: 'numeric' }, { data:'limit', type: 'date', dateFormat: 'YYYY/MM/DD' }, ], colHeaders: [ "A", "B", "C" ], copyPaste: true, autoColumnSize: true, maxCols: 3, filters: true, dropdownMenu: ['filter_by_condition', 'filter_by_value', 'filter_action_bar'], dataSchema: { item:'aaa', price:120, limit:null }, contextMenu: { items:{ 'row_above': { name: '1行挿入' }, 'remove_row': { name: '1行削除', disabled: function(){ return hot.countRows() < 2; } }, "hsep": "---------", 'undo': { name: '戻る' }, }, }, afterCreateRow: function(row, amount){ this.setDataAtCell(row, 2, moment().format("YYYY/MM/DD")); }, licenseKey: 'non-commercial-and-evaluation', });
もしくは、イベントフック追加として書くなら、
hot.addHook('afterCreateRow', function(row, amount){ this.setDataAtCell(row, 2, moment().format("YYYY/MM/DD")); });
このように afterCreateRow を定義した時に、
注意すべき点は、コピー&Paste で貼り付け時に行生成されて
行生成 → DataSchema 実行 → 貼り付け → afterCreateRow 実行
となってしまうことである。