Как заставить работать функции диалога

Я хочу открыть диалог и работать с данными после того, как диалог вернется в порядке. Проблема в том, что:success-fn не вызывается после отправки диалога. Это как-то связано со слушателем с кнопки. Если connectDialog вызывается без прослушивателя, вызывается функция:success-fn.

Код:

(def dbConnectionForm
  (grid-panel :columns 2
              :items ["Database Driver" (combobox :id :dbdriver :model ["postgresql" "mysql"])
                      "Database"        (text :id :dbname :text "postgres")
                      "Port"            (text :id :dbport :text "32768")
                      "Username"        (text :id :username :text "postgres")
                      "Password"        (text :id :password :text "postgres")]))

(defn connectionDialog []
  (print (-> (dialog
    :content dbConnectionForm
    :option-type :ok-cancel
    :type :plain
    :success-fn (fn [e] (print (value dbConnectionForm)))
    )pack! show!))
  )

(def connectButton (button :text "Connect"
                           :listen [:action (fn [e] (connectionDialog))]))

1 ответ

Решение

Это, вероятно, потому что вы используете print, Измените это на println или добавить вызов flush внутри обратного вызова после print,

Если (value dbConnectionForm) возвращает небольшое значение (как в чем-то, что при превращении в строку имеет только несколько символов) и не содержит символов новой строки, оно может не побудить аутстрим автоматически сбрасываться, поэтому текст застревает в буфере.

Другие вопросы по тегам