いくつかの問題があります。
ノックアウト 1.2.1 を使用しています
foreach
バインディングは Knockout 2.0 まで追加されませんでした。
を使用していませんobservableArray
空の配列ではなく、categories
プロパティをに変更する必要があります。ko.observableArray()
そうしないと、Knockout はいつアクセスしたかを監視できずpush
、remove
メソッドは存在しません。
あなたのthis
束縛は間違っています。
イベント ハンドラーから呼び出されると、this
正しく設定されません。これはさまざまな方法で修正でき、Knockout のドキュメントで詳細に説明されていますが、簡単な修正の 1 つは、参照をviewModel
ではなく に変更することthis
です。
これらすべてを修正するには、Knockout 2.0 にアップグレードし、ビュー モデルの宣言を次のように変更する必要があります。
var viewModel = {
name: ko.observable(''),
description: ko.observable(''),
categories: ko.observableArray(),
categoryToAdd: ko.observable(''),
removeCategory: function(category) {
viewModel.categories.remove(category);
},
addCategory: function() {
viewModel.categories.push(new Category(viewModel.categoryToAdd()));
viewModel.categoryToAdd('');
}
};
修正された JSFiddle は次のとおりです: http://jsfiddle.net/ueNg7/19/