在ClojureScript中不能使用goog.fx.Dragger

时间:2014-10-02 06:11:57

标签: clojure namespaces clojurescript

我正在尝试构建一个使用goog.fx.Dragger来使目标可拖动的小om组件。我需要goog.fx.Dragger:像拖拉机那样:

(ns om-draggable-me.core
  (:require [om.core :as om :include-macros true]
            [om.dom :as dom :include-macros true]
            [goog.fx.Dragger :as dragger]))

当我使用它时:

(defn draggable [app owner]
  (reify
    om/IDidMount
    (did-mount [_]
               (let [target (om/get-node owner)]
                 (dragger. target)))
    om/IRender
    (render [_]
            (dom/div #js {:id "drag-box" :className "drag-box"}))))

我收到编译器警告:

警告:在第22行src / cljs / om_draggable_me / core.cljs使用未声明的Var om-draggable-me.core / dragger

看到使用goog.fx.DragDrop的其他例子,为什么这不起作用?

2 个答案:

答案 0 :(得分:1)

require表单中,dragger是名称空间别名

[goog.fx.Dragger :as dragger]

打算像这样使用:

dragger/your-var 
;; the same as goog.fx.Dragger/your-var

在你的脚本中,它被用作了一个var:

(dragger. target)

并且,正如编译器所抱怨的,这样的var还没有被定义。

您可以看到人们像这样引用clojure.string

(require '[clojure.string :as str])

无需担心与clojure.core/str功能冲突:

(str/join ", " [1 2 3])
(str "hello" "world")

答案 1 :(得分:0)

由于某种原因,别名不起作用,它使用完全限定名称:

(did-mount [_]
           (let [target (om/get-node owner)]
             (goog.fx.Dragger. target)))