我不确定如何读取属性,我定义了此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>


一旦有了variablie Initialie,则json是{},我期望一个像

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

最佳答案

在初始化将任何内容推入criterias数组之前,您的警报正在触发,因此在该点上未定义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>

关于javascript - 无法读取对象的子对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55070570/

10-12 00:17
查看更多