【问题标题】:Can't require goog.fx.Dragger in ClojureScriptClojureScript 中不能需要 goog.fx.Dragger
【发布时间】:2014-10-02 06:11:57
【问题描述】:

我正在尝试构建一个小型 om 组件,它使用 goog.fx.Dragger 使目标可拖动。我需要 goog.fx.Dragger :as 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 的例子,为什么这不起作用?

【问题讨论】:

    标签: clojure namespaces clojurescript


    【解决方案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")
    

    【讨论】:

    • 感谢您的解释。也许更好地使用 :import here 而不是 (:import [goog.fx Dragger])
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 2015-10-08
      相关资源
      最近更新 更多