Clojure, JavaFX Eventhandler ไม่ได้อยู่ในเนมสเปซ

ฉันกำลังพยายามสร้าง EventHandler สำหรับมุมมองที่ใช้ FXML ใน Clojure Projekt ของฉัน ตามที่อธิบายไว้ที่นี่: http://drowsy.de/blog/?p=7 i เพิ่มใน FXML สิ่งนี้

onAction="(use 'ui.listener) (add-tolist-listener event)"

ไปที่ปุ่ม

แต่เมื่อฉันเปิดแอปพลิเคชัน ฉันได้รับข้อความแสดงข้อผิดพลาดดังนี้:

LoadException Error resolving onAction='(use 'ui.listener)
(add-tolist-listener event)', either the event handler is not in 
the Namespace or there is an error in the script.

ใน ui.listener คือตัวจัดการเหตุการณ์

(defn add-tolist-listener [event]
(println "I'm a Button"))

มีความคิดใดบ้างว่าทำไมสิ่งนี้ถึงใช้งานไม่ได้? ฉันลองด้วยสัญกรณ์นี้

onAction = #add-tolist-listener

และมันก็ไม่ได้ผลเช่นกัน

ขอบคุณ!


person GameYoker    schedule 04.01.2017    source แหล่งที่มา


คำตอบ (2)


อย่างไรก็ตาม ฉันไม่คุ้นเคยกับ JavaFX เลย:

onAction="(use 'ui.listener) (add-tolist-listener event)"

ดูเหมือนโค้ด Java ดังนั้นการมีไวยากรณ์ Clojure ในที่นี้ดูเหมือนจะใช้งานไม่ได้ใช่ไหม ฉันสงสัยว่าคุณจะต้องเรียกรหัส Clojure ของคุณโดยใช้ Java หรือไม่

ปิด "การเรียกโค้ด Clojure จาก Java"

คุณจะต้องลองสิ่งที่ชอบ:

ui.listener.add_tolist_listener

คุณอาจพบว่าโพสต์บนบล็อกนี้ให้แนวคิดอีกอย่างแก่คุณในการลอง: กำลังเรียกใช้โค้ด Clojure จาก Java

person Mike    schedule 05.01.2017
comment
ui.listener.add_tolist_listener ก็ใช้งานไม่ได้เช่นกัน... ไม่ ฉันตั้งค่า gui ด้วย Clojure เท่านั้น ฉันไม่เรียก Clojure ด้วย Java - person GameYoker; 05.01.2017

ตอนนี้ตั้งค่าการดำเนินการในฟังก์ชันเริ่มต้นของฉันผ่านแล้ว

(.setOnAction (.lookup root "#startCalculationBtn")
  (proxy [EventHandler] []
    (handle [^ActionEvent event]
      (start-calculation))
    )
  )

และมันก็ได้ผล

person GameYoker    schedule 05.01.2017