Handsontable の DataSchema と afterCreateRow

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 実行
となってしまうことである。