Knockout.js订阅了可观察数组中的observable元素

时间:2018-06-17 17:59:02

标签: knockout.js observable subscribe

js我的课程在更改时不订阅可观察数组。控制台日志不显示。我不知道如何解决它。有什么想法吗?

class Course {
  constructor(data) {
    this.id = ko.observable(data.id);
    this.name = ko.observable(data.name);
    this.lecturer = ko.observable(data.lecturer);
    this.name.subscribe(function(newName) {
      console.log(newName);
    });
    this.lecturer.subscribe(function(newLecturer) {
      console.log(newLecturer);
    });
  }
}

function ProtoModel() {
  var self = this;
  self.courses = ko.observableArray([]);
  self.addCourse = function() {
    const newCourse = new Course({
      name: this.newCourseNameText(),
      lecturer: this.newCourseLecturerText()
    });
    self.courses.push(ko.mapping.toJS(newCourse));
    self.newCourseNameText("");
    self.newCourseLecturerText("");
  };
}

var model = new ProtoModel();

ko.applyBindings(model);

1 个答案:

答案 0 :(得分:1)

在Course构造函数中,您创建了全新的observable,然后仅将旧的observable中的值赋值给它。并且您订阅了这个新的可观察对象。

然后,在创建之后,您正在尝试更改“旧”可观察对象,如果您订阅其更改 - 您将看到它们。但是,在新课程中创建的可观察者保持不变。

尝试替换

self.newCourseNameText("");
self.newCourseLecturerText("");

self.newCourse.name("");
self.newCourse.lecturer("");