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 でどのように処理できますか?
繰り返しますが、 fullName
onthis
とfirstName
/の依存関係に注意してくださいlastName
。