这里是JS的淘汰赛样片:方法定义为ClojureScript函数调用的结果
function AppViewModel() {
this.firstName = ko.observable('Bob');
this.lastName = ko.observable('Smith');
this.fullName = ko.computed(function() {
return this.firstName() + " " + this.lastName();
}, this);
}
如果你不熟悉KO,在AppViewModel
每个字段成为功能(即ko.observable
和ko.computed
各返回一个函数还要注意的是fullName
取决于两个功能
我怎么能改写这ClojureScript
一件事是尝试:?
(deftype AppViewModel [firstName lastName]
Object
(fullName [this] (.computed js/ko (str (firstName) " " (lastName)))))
(defn my-model [first last]
(AppViewModel.
(.observable js/ko "Bob")
(.observable js/ko "Smith")))
虽然它不起作用,因为fullName
变成一个函数,调用ko.computed
。也就是,它编译为:
my_namespace.AppViewModel.prototype.fullName = function() {
return ko.computed([cljs.core.str(this.firstName.call(null)), cljs.core.str(" "), cljs.core.str(this.lastName.call(null))].join(""))
};
我该如何在ClojureScript中处理它?
同样,请注意fullName
对this
和firstName
/lastName
的依赖关系。
请注意,您目前只能传递一个字符串参数'.computed '。在你的JavaScript例子中,你传递一个函数和一个引用。 – eagleflo