我正在尝试使用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文件才能使用,这可能是一项重大任务。任何人都可以确认吗?
答案 0 :(得分:6)
解决这个问题有两个不同的方面。
要在高级模式下编译,我需要将以下内容添加到我的外部文件中。
$.prototype.sortable = function (a,b) { };
$.prototype.disableSelection = function (a,b) { };
我正在使用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")
但是这不可行,因为jquery-ui代码需要在jquery之后但在生成的ClojureScript之前包含。解决方案是在页面中手动包含库:
(include-js "/js/jquery.js")
(include-js "/js/jquery-ui.js")
(include-js "/cljs/bootstrap.js") ;; Generated