タイプスクリプト(0.9)で動作するノックアウトjs(2.21)の紹介チュートリアルを取得しようとしています。データバインディングが機能していないようです。これは、私が数年ぶりに見た JavaScript です。typescript クラスを使用して生成されたビューモデルに html を正しく接続する方法が不足していると思います。クラスをチュートリアルに導入しようとしたときにのみ問題が発生しました。ここにjsfiddleがあります。
HTML フラグメント:
<body>
<!-- This is a *view* - HTML markup that defines the appearance of your UI -->
<p>First name: <strong data-bind="text: firstName"></strong></p>
<p>Last name: <strong data-bind="text: lastName"></strong></p>
<p>First name: <input data-bind="value: firstName" /></p>
<p>Last name: <input data-bind="value: lastName" /></p>
<p>Full name: <strong data-bind="text: fullName"></strong></p>
<button data-bind="click: capitalizeLastName">Go Caps</button>
</body>
タイプスクリプトの断片
class koIntroductionViewModel {
firstName: any;
lastName: any;
fullName: any;
constructor() {
this.firstName = ko.observable("Bert");
this.lastName = ko.observable("Bertington");
this.fullName = ko.computed(this.createFullname());
}
createFullname() {
return this.firstName + " " + this.lastName;
}
capitalizeLastName() {
var currentVal = this.lastName;
this.lastName = currentVal.toUpperCase();
}
}
window.onload = () => {
ko.applyBindings(new koIntroductionViewModel());
}
生成された JavaScript
var koIntroductionViewModel = (function () {
function koIntroductionViewModel() {
this.firstName = ko.observable("Bert");
this.lastName = ko.observable("Bertington");
this.fullName = ko.computed(this.createFullname());
}
koIntroductionViewModel.prototype.createFullname = function () {
return this.firstName + " " + this.lastName;
};
koIntroductionViewModel.prototype.capitalizeLastName = function () {
var currentVal = this.lastName;
this.lastName = currentVal.toUpperCase();
};
return koIntroductionViewModel;
})();
window.onload = function () {
// Activates knockout.js
ko.applyBindings(new koIntroductionViewModel());
};