Javascript 数组中的敲除数组

Javascript 数组中的敲除数组,javascript,jquery,arrays,knockout.js,Javascript,Jquery,Arrays,Knockout.js,我正在尝试使用Knockout创建一个简单的电子表格。我试图让每个细胞都可以观察到,这样在发生变化时,我就可以评估值并进行相应的计算。因此,如果他们在单元格中输入6+7,我可以计算并将值更改为总数 然而,我不能让每个细胞都被观察到。也许我做错了 我曾试图创建一个小提琴,但现在正努力加载jquery。因此,尽管我可以在VisualStudio本地运行它,小提琴手却在抱怨美元。(如果能帮上忙,那就太好了) 我生成的可观察数组如下所示: self.RowCount=ko.可观察(0); self.C

我正在尝试使用Knockout创建一个简单的电子表格。我试图让每个细胞都可以观察到,这样在发生变化时,我就可以评估值并进行相应的计算。因此,如果他们在单元格中输入6+7,我可以计算并将值更改为总数

然而,我不能让每个细胞都被观察到。也许我做错了

我曾试图创建一个小提琴,但现在正努力加载jquery。因此,尽管我可以在VisualStudio本地运行它,小提琴手却在抱怨美元。(如果能帮上忙,那就太好了)

我生成的可观察数组如下所示: self.RowCount=ko.可观察(0); self.ColumnCount=ko.可观察(0)

self.Columns=ko.observearray([]);
self.Rows=ko.observearray([]);
self.Refresh=函数(){
对于(i=0;i0&&self.ColumnCount()>0);
我根据用户输入的列和行呈现一个表(目前,限制为5乘5,因为我使用数组将1,2,3(列)转换为a、B、C。但这是临时的,将是固定的


如何使每个单元格都可见,以便在更改时订阅并触发事件?

您似乎没有使用
cellObject
(从您的小提琴中)。如果您将
cellObject
类型的对象添加到行中,并在其中为
添加可见对象,则可以订阅该行的更改

固定代码:

var-cellObject=function(){
var self=这个;
self.data=ko.observable();
自计算=可观察();
self.rowNum=ko.observable(0);
self.colNum=ko.observable(0);
self.rows=ko.observearray([]);
self.value=ko.observable();
}
函数SpreadsheetViewModel(){
var self=这个;
self.ShowSheet=ko.可观察(假);
自我展示表(假);
self.Letters=['A','B','C','D','E']
self.RowCount=ko.可观察(0);
self.ColumnCount=ko.可观察(0);
self.Columns=ko.observearray([]);
self.Rows=ko.observearray([]);
函数值已更改(新值){
console.log(“值更改为”+newValue);
}
self.Refresh=function(){
对于(i=0;i0&&self.ColumnCount()>0);
}
self.Refresh();
}
var vm=新的电子表格视图模型();
ko.applyBindings(vm);

栏数
行数
刷新

我使用了一个可写的可计算表,因此如果在其中一个单元格中键入1+1并进行制表,它将更改为2。这是更新的小提琴


谢谢!那太好了。我离得太近了…只是没有想到使用我的对象,而不是匿名对象。但是我可以订阅大多数主视图模型吗?原因是,如果用户输入“=B2”…我需要找到B2单元格,获取值,然后使用该值。在对象中订阅它是自我的-我不确定我是否可以访问所有其他单元格。检查更新。它没有完全订阅主视图模型,但该函数现在位于主视图模型中,因此您可以访问其他单元格。谢谢H77…我得到的“valueChanged”不是一个函数。它是否应该声明为self.valueChanged?如果您运行它,上面的代码段可以正常工作。也许您已经有什么吗?但是如果你想的话,你可以把它添加到self中。你也必须改变呼叫者。我必须……复制并粘贴你的线路,一切都很好。谢谢你的帮助!
self.Columns = ko.observableArray([]);
self.Rows = ko.observableArray([]);

self.Refresh = function () {

    for (i = 0; i < self.RowCount(); i++) {
        var obj = {
            data: i + 1,
            calculated: i,
            rowNum: i,
            colNum: 0,
            columns: ko.observableArray([])
        };

        for (j = 0; j < self.ColumnCount(); j++) {
            obj.columns.push(ko.observable({
                label: self.Letters[j],
                value: j + 1,
                colIndex: j, 
                rowIndex: i
            }));
        }
        self.Rows.push(obj);

    }
    self.ShowSheet(self.RowCount() > 0 && self.ColumnCount() > 0);
function column(label, value, colIndex, rowIndex ){
var self = this;
this.label = ko.observable(label);
this.value = ko.observable(value);
this.colIndex = ko.observable(colIndex);
this.rowIndex = ko.observable(rowIndex);
this.writableValue = ko.pureComputed({
        read: function () {
            return self.value();
        },
        write: function (v) {
           self.value(eval(v))
        },
        owner: this
    });
}