无法读取对象的子项

Can't read child of object

我不确定如何读取属性,我定义了这个 javascript 函数

function Criteria(object1, object2, object3, object4) {
    var self = this;
    self.object1 = ko.observable(object1);
    self.object2 = ko.observable(object2);
    self.object3 = ko.observable(object3);
    self.object4 = ko.observable(object4);
}

然后我定义我的主视图模型如下

   var vmBudget = function () {
        var self = this;
        this.criterias = ko.observableArray();
        this.initialize = function () {
          self.criterias.push(new Criteria("test","","",""));
          self.criterias.push(new Criteria("", "test2", "", ""));
        };
        alert(JSON.stringify(self.criterias()[0].object1()));
   }

在我的 html

<script>
    $(document).ready(function () {
        var vm = new vmBudget();
        ko.applyBindings(vm, document.getElementById("L09budget"));
        vm.initialize();
    });
</script>

一旦我有了变量 Initialie,json 就是 {},我期待 Json 像

{
Object1: ""
Object2: ""
Object3: ""
Object4: ""
}

你的警报在你的初始化将任何东西推入标准数组之前触发,所以是的 criterias()[0] 在那个时候是未定义的。

如果您将警报移动到初始化函数中,以便它在项目被推入数组后发生,您应该会看到预期的数据。

function Criteria(object1, object2, object3, object4) {
   var self = this;
   self.object1 = ko.observable(object1);
   self.object2 = ko.observable(object2);
   self.object3 = ko.observable(object3);
   self.object4 = ko.observable(object4);
}

var vmBudget = function() {
   var self = this;
   this.criterias = ko.observableArray();
   this.initialize = function() {
      self.criterias.push(new Criteria("test", "", "", ""));
      self.criterias.push(new Criteria("", "test2", "", ""));
      alert(JSON.stringify(self.criterias()[0].object1()));
   };
}

var vm = new vmBudget();
ko.applyBindings(vm);
vm.initialize();
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>