2012-07-19 3 views
4

jail.ui.sortable과 함께 jayq를 사용하여 페이지 목록을 으로 정렬하려고합니다.jayq와 함께 ClojureScript에서 jquery-ui 사용

(.sortable ($ :#sortable)) 

아래로 컴파일 어느 :

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

그리고 던졌습니다 :

Uncaught TypeError: Cannot call method 'call' of undefined 

나는에 포함하려고 할 때 http://jqueryui.com/demos/sortable/ 보면으로 간단 로해야 것 같아 페이지. 흥미롭게도 생성 된 코드 은 js 콘솔에 붙여 넣을 때 페이지에서 작동합니다.은 해당 라인이 실행 된 후에 필요한 것이 필요하다는 것을 의미합니다.

가 나는 충분하지 않는 것 http://lukevanderhart.com/2011/09/30/using-javascript-and-clojurescript.html 을 읽은 후

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

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

를 수정했습니다. 나는 jquery.ui 는 $ 프로토 타입을 수정 같은데요,하지만 난 어떤 차이가 경우도, 느와르와 느와르 - cljs을 사용하고

clojurescript에서이 작업을 수행하는 방법을 잘 모르겠어요.

using jQueryUI with closure compiler을 보면 jquery-ui가 손으로 롤인 된 externs 파일을 사용하여 아마도 주요한 작업을 수행해야 할 수도 있습니다. 누구든지 확인할 수 있습니까?

답변

6

이 문제를 해결하는 데는 두 가지 측면이있었습니다.

  1. 고급 모드에서 컴파일하려면 다음을 내 externs 파일에 추가해야했습니다.

    (: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 코드 때문에 작동하지 않을 수 있습니다 내가 느와르 - cljs를 사용하여, 내 뷰 템플릿에있어

$.prototype.sortable = function (a,b) { }; 
$.prototype.disableSelection = function (a,b) { }; 
  • 다음을했다 jquery 이후에 생성 된 ClojureScript 앞에 포함되어야합니다. 해결책은 페이지에 라이브러리를 수동으로 포함시키는 것입니다.

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