2012-09-10 52 views
2

我想写一个返回如[“富”,“酒吧”]或(名单“富”,“酒吧”),一个复杂的项目一个clojurescript功能,我想成为能够从JavaScript调用此函数并获取返回值的各个部分。如何做呢?在我的情况下,我要返回的vector/list/collection中的项目数量已知,并且该集合应该保持有序。如何使用复杂的返回对象从clojurescript在JavaScript

这是我的clojurescript功能。如果事情变得简单,我可以在这里做一些不同的事情。只是不知道那会是什么。

(defn myFn [] ["foo" "bar"]) 

下面是它编译为javascript后的样子。这部分完全由前面的代码确定/生成。为了在这里做出改变,我必须知道如何在clojurescript中调整前一部分。

my.ns.myFn = function myFn() { 
    return cljs.core.PersistentVector.fromArray(["foo", "bar"], true) 
}; 

当我做在JavaScript下面,我看到一个警告框弹出与[“富”,“酒吧”]

alert(my.ns.myFn()); 

但是,如果我尝试以下方法,警报显示“未定义“而不是”富“。

var tmp = my.ns.myFn(); 
alert(tmp[0]); 

我应该采取什么不同的方式让警报显示“foo”? (嗯,我想我可以编写更多的clojurescript使用该值,看看如何编译为JavaScript ...)

+0

你能发布你的代码吗?并更好地解释你想达到什么目标? – Oriol

回答

5

在clojurescript:

(ns foo.core) (defn ^:export bar [x] (array 0 1 2))

在javascript:

var result_array = foo.core.bar(x);

...使用result_array作为一个正常的JavaScript数组。

0

所以我写了更多的clojurescript使用myFn和它的返回值。生成的JavaScript看起来像这样:

var tmp = my.ns.myFn.call(null); 
var first = cljs.core.first.call(null, tmp); 
var second = cljs.core.nth.call(null, tmp, 1); 
相关问题