KnockoutJs - 推送到可观察数组中的元素不起作用

时间:2013-07-02 15:55:32

标签: javascript jquery knockout.js

我有一个对象(analysisLogData),我用它来使用KnockoutJS生成一个表。这是包含此对象的viewModel:

function AppViewModel() {
    var self = this;
    self.analysisLogData = ko.observableArray();
    self.analysisLogTitle = ko.observable("Warnings")

    self.changeAnalysisLog = function(title) {
         self.analysisLogTitle(title)   
    }

    var data =

    {
        "Warnings": [
            {
                "number": 3002,
                    "description": "There may be a problem with the device you are using if you use the default profile"
            },

            {
                "number": 3001,
                    "description": "There may be a problem with the device you are using if you don't use the default profile"
            }

            ]

        ,
            "Errors": [
            {


                "number": 1000,
                    "description": "No networks are loaded"
            },

            {
                "number": 1002,
                    "description": "No devices are loaded"
            }]




    }


    self.addLog = function (type, content) {
        self.analysisLogData()[type].push(content);
    }

    self.analysisLogData.push(data)


}

ko.applyBindings(new AppViewModel());

您可以在JSFiddle中看到结果:http://jsfiddle.net/etiennenoel/V4r2e/5/

我希望能够添加错误或警告而不会丢失已经存在的警告或错误。

我尝试在self.addLog函数中执行以下操作:

self.addLog = function (type, content) {
        self.analysisLogData()[type].push(content);
    } 

但是它说不能推送到未定义的对象......

2 个答案:

答案 0 :(得分:2)

好的,在小提琴里玩耍之后。我相信你需要对你在可观察数组中推送数据的方式做一些改变。但是,如果不进行大量修改,请在此链接中检查我的解决方案。

jsfiddle example

self.addLog = function (type, content) {

    self.analysisLogData()[0][type].push({
        "number": 1002,
        "description": content
    });
}

数据对象应该是

"Warnings": ko.observableArray([........]),
"Errors": ko.observableArray([..........])

我做了两件事

  1. 修改警告&错误是一个可观察数组
  2. 我推送了 self.analysisLogData()[0] [type] .push 中的数据,而不是 self.analysisLogData()[type] .push

答案 1 :(得分:0)

self.analysisLogData()是一个包含错误/警告数组的数组。

我不确定您是否希望数据结构化。

为了让小提琴起作用,你可以用以下代码替换addLog函数:

self.addLog = function (type, content) {
        self.analysisLogData()[0][type].push(content);
    }