モデルに、コンマ区切りの文字列を配列に分割するだけの計算プロパティがあり、「チェック済み」バインディングの特別な配列機能を利用して、計算プロパティを介して変更を書き戻せるようにしたいと考えています。
計算されたプロパティの読み取りにはすべてがうまく機能しますが、チェックボックスの1つをチェックするとすぐに、いくつかの機能がスプライスをサポートしていない(チェックを外した場合)またはプッシュをサポートしていない(チェックした場合)というエラーが表示されます。
> Uncaught TypeError: Object function
> h(){if(0<arguments.length)return"function"===typeof
> v?v.apply(d,arguments):j(Error("Cannot write a value to a ko.computed
> unless you specify a 'write' option. If you wish to read the current
> value, don't pass any parameters.")),this;n||g();b.r.Wa(h);return l}
> has no method 'splice' knockout-min.js:60 (anonymous function)
何が起こっているのかを説明するために、jsfiddle で簡単なサンプルを作成しました。http://jsfiddle.net/Y6tXw/
var MyModel = function() {
this.src = ko.observable("one,two");
this.comp = ko.computed({
read: function() {
return (this.src() || "").split(",");
},
write: function(value) {
var csvs = (value || []).join(",");
this.src(csvs);
},
owner: this
});
};
var model = new MyModel();
ko.applyBindings(model);
私の書き込み機能を呼び出すことはありません。ビンディングでぶっ壊れそうです。私は何を間違っていますか?