1

テーブルに必要なすべてのプロパティ (行、列数、スタイル、クラス、ヘッダー スタイルなど) は既にあります。

ユーザーがカスタム ボタンをクリックしたときに、ダイアログを介さずに、このプロパティを含むテーブルを追加する必要があります。

ダイアログを表示し、必要なフィールドを自分のデータに置き換えて、OK クリックをトリガーすることを考えました。しかし、これは..ちょっと醜い解決策です。

教えてください、このタスクのエレガントな解決策はありますか?

4

1 に答える 1

0

実際にデフォルト値をハックして 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、デフォルト値が文字列に変換しようとするたびにメソッドが呼び出されることです。そして、このデフォルト値が入力に置かれると、まさにこれが起こります。

于 2013-11-04T05:59:15.847 に答える