2014-10-02 39 views
1

我在尝试构建一个使用goog.fx.Dragger使目标可拖动的小型om组件。我需要goog.fx.Dragger:作为牵引和像这样:不能要求在ClojureScript中使用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"})))) 

我得到的编译器警告:

警告:使用未申报瓦尔om-draggable-me.core/dragger at line 22 src/cljs/om_draggable_me/core.cljs

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

回答

1

在你require形式,dragger是空间别名

[goog.fx.Dragger :as dragger] 

其目的是使用像这样:

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

而在你的脚本中,它被使用就好像它是一个变种:

(dragger. target) 

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

你可以看到人们是指clojure.string这样的:

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

,而不必担心与clojure.core/str功能发生冲突:

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

谢谢你的解释。也许更好用:import here而不是'(:import [goog.fx Dragger])' – Swemail 2014-12-16 12:26:59

0

出于某种原因,别名没有工作,它完全合格的名称的工作原理:

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