Javascript 限制ObservableArray中的项目数

Javascript 限制ObservableArray中的项目数,javascript,knockout.js,Javascript,Knockout.js,我正在尝试创建一个扩展程序来限制可以推送到可观察数组中的项的数量。我遇到的问题是什么时候应该写。我得到一个关于对象没有“push”方法的错误 这把小提琴演示了我所说的内容。单击任何复选框时,将显示错误。你必须在Chrome或Firefox中打开开发者工具窗口才能看到错误 这里有一个快速而肮脏的方法 ko.extenders.arrayMaxLength = function(target, length) { target.push2 = target.push; target.

我正在尝试创建一个扩展程序来限制可以推送到可观察数组中的项的数量。我遇到的问题是什么时候应该写。我得到一个关于对象没有“push”方法的错误

这把小提琴演示了我所说的内容。单击任何复选框时,将显示错误。你必须在Chrome或Firefox中打开开发者工具窗口才能看到错误


这里有一个快速而肮脏的方法

ko.extenders.arrayMaxLength = function(target, length) {
    target.push2 = target.push;
    target.push = function (value) {
        if (this().length < length) {
            this.push2(value);
        }
    };
    return target;
};
ko.extenders.arrayMaxLength=函数(目标,长度){
target.push2=target.push;
target.push=函数(值){
if(this().length

它不是很有用,因为它不会停止选中复选框(我假设这是您希望发生的事情),它只是停止向数组生成值

一个更好的解决方案是编写一个带有限制值的自定义已检查绑定处理程序,该限制值将阻止它们被检查


希望这能有所帮助。

以下是我最后做的事情:


基本上,只需控制复选框是否启用。

Knockout需要一个observableArray,但您已将其替换为一个没有push()方法的计算observable。你需要找到一个不同的解决方案。