2016-01-08 4 views
1

Я пытаюсь преобразовать следующий JavaScript определение функции в ClojureScript без толка:Вложенный объект, как обратный вызов в ClojureScript

chrome.webRequest.onBeforeRequest.addListener(
     callback_function, 
     {urls: ["<all_urls>"]}, 
     ["blocking"]); 

Вот ClojureScript я использую, чтобы попытаться повторить это:

(defn my-listener 
    [data] 
    (.log js/console data)) 

(defn web-request 
    [listener] 
    (.. js/chrome -webRequest -onBeforeRequest (addListener listener) (clj->js {"urls" ["<all_urls>"]}) (clj->js ["blocking"]))) 

(web-request my-listener) 

Похоже, что последние 2 части объявления функции не генерируются должным образом (бит {urls: ["<all_urls>"]}, ["blocking"]). Вот что компилятор выводит из версии ClojureScript:

example.core.my_listener = function example$core$my_listener(data) { 
    return console.log(data) 
} 
; 
example.core.web_request = function example$core$web_request(listener) { 
    return chrome.webRequest.onBeforeRequest.addListener(listener).clj__GT_js(new cljs.core.PersistentArrayMap(null ,1,["urls", new cljs.core.PersistentVector(null ,1,5,cljs.core.PersistentVector.EMPTY_NODE,["\x3call_urls\x3e"],null)],null)).clj__GT_js(new cljs.core.PersistentVector(null ,1,5,cljs.core.PersistentVector.EMPTY_NODE,["blocking"],null)) 
} 
; 
example.core.web_request.call(null , example.core.my_listener); 

Любые предложения будут оценены. Благодаря!

ответ

0

Ваш метод добавления слушателя/функция/prototype_inheritance_thing является Арность три процедуры поэтому вы должны назвать это так:

(defn web-request 
    [listener] 
    (.. js/chrome -webRequest -onBeforeRequest (addListener listener (clj->js {"urls" ["<all_urls>"]}) (clj->js ["blocking"])))) 
+0

Это сделал трюк - спасибо за тонну! – John

Смежные вопросы