在jloq中使用ClojureScript中的jquery-ui

时间:2012-07-19 22:37:24

标签: jquery-ui clojurescript

我正在尝试使用jayq和jquery.ui.sortable在页面上创建列表 排序。看http://jqueryui.com/demos/sortable/它似乎应该如此 简单如:

(.sortable ($ :#sortable))

编译为:

jayq.core.$.call(null, "\ufdd0'#sortable").sortable();

抛出:

Uncaught TypeError: Cannot call method 'call' of undefined

当我尝试将其包含在页面中时。有趣的是,生成的代码 当我将它粘贴到js控制台时,它在页面中工作,这意味着 对我来说,在执行该行之后会加载必要的东西。

我已经修改了

(def cljs-options {:advanced {:externs ["externs/jquery.js"]}})

(def cljs-options {:advanced {:externs ["externs/jquery.js" "js/ui/jquery-ui.js]}})

看完之后 http://lukevanderhart.com/2011/09/30/using-javascript-and-clojurescript.html ,这似乎不够。我猜是jquery.ui 修改了$ Prototype,但我不知道如何实现这个目标 clojurescript

如果它有任何区别,我也会使用黑色和黑色的。

查看using jQueryUI with closure compiler可能只是jquery-ui需要手动滚动的externs文件才能使用,这可能是一项重大任务。任何人都可以确认吗?

1 个答案:

答案 0 :(得分:6)

解决这个问题有两个不同的方面。

  1. 要在高级模式下编译,我需要将以下内容添加到我的外部文件中。

    $.prototype.sortable = function (a,b) { };
    $.prototype.disableSelection = function (a,b) { };
    
  2. 我正在使用noir-cljs,在我的视图模板中,有以下内容:

    (:require [noir.cljs.core :as cljs])
    (:use [hiccup.page :only [include-js]])
    ...
    (cljs/include-scripts :with-jquery)  
    (include-js "/js/jquery-ui.js")
    
  3. 但是这不可行,因为jquery-ui代码需要在jquery之后但在生成的ClojureScript之前包含。解决方案是在页面中手动包含库:

    (include-js "/js/jquery.js")
    (include-js "/js/jquery-ui.js")
    (include-js "/cljs/bootstrap.js") ;; Generated