テーブルに必要なすべてのプロパティ (行、列数、スタイル、クラス、ヘッダー スタイルなど) は既にあります。
ユーザーがカスタム ボタンをクリックしたときに、ダイアログを介さずに、このプロパティを含むテーブルを追加する必要があります。
ダイアログを表示し、必要なフィールドを自分のデータに置き換えて、OK クリックをトリガーすることを考えました。しかし、これは..ちょっと醜い解決策です。
教えてください、このタスクのエレガントな解決策はありますか?
テーブルに必要なすべてのプロパティ (行、列数、スタイル、クラス、ヘッダー スタイルなど) は既にあります。
ユーザーがカスタム ボタンをクリックしたときに、ダイアログを介さずに、このプロパティを含むテーブルを追加する必要があります。
ダイアログを表示し、必要なフィールドを自分のデータに置き換えて、OK クリックをトリガーすることを考えました。しかし、これは..ちょっと醜い解決策です。
教えてください、このタスクのエレガントな解決策はありますか?
実際にデフォルト値をハックして getter 関数のようにし、ダイアログが表示されたら [OK] ボタンをクリックして問題を解決しました。
(警告、コーヒー)
CKEDITOR.on 'dialogDefinition', (ev) ->
if ev.data.name is 'table'
info = ev.data.definition.getContents 'info'
advanced = ev.data.definition.getContents 'advanced'
# HACK: default value now returns always value I have control on
info.get('txtRows')['default'] = { toString: -> self.ckeditor_table_rows }
info.get('txtCols')['default'] = { toString: -> self.ckeditor_table_cols }
# setup some normal defaults
info.get('txtWidth')['default'] = ''
info.get('txtBorder')['default'] = '0'
info.get('selHeaders')['default'] = 'row'
advanced.get('advCSSClasses')['default'] = 'table table-striped'
ev.data.definition.dialog.on 'show', ->
# make it create table, once dialog shown
this.getButton('ok').click()
# hide my own popover-like dialog
$('.has-popover').popover('hide')
ここでのトリックはtoString
、デフォルト値が文字列に変換しようとするたびにメソッドが呼び出されることです。そして、このデフォルト値が入力に置かれると、まさにこれが起こります。