Knockout の JS のサンプルは次のとおりです。
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 に書き直すにはどうすればよいですか?
試すことの1つは次のとおりです。
(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 でどのように処理できますか?
繰り返しますが、 fullNameonthisとfirstName/の依存関係に注意してくださいlastName。