我的模型上有一个计算属性,它只是将逗号分隔的字符串拆分为一个数组,我希望能够利用“已检查”绑定的特殊数组功能通过计算属性写回更改。
一切都非常适合读取计算的属性,但是一旦我选中其中一个复选框,我就会收到有关某些功能不支持拼接(如果我取消选中)或不支持推送(如果我选中)的错误。
> 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);
它从不调用我的 write 函数。似乎它在绑定中崩溃了。我究竟做错了什么?