Knockout.js 订阅可观察数组中的可观察元素
Knockout.js subscribe to observable element inside observable array
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);
在课程构造函数中,您创建了全新的可观察对象,然后仅将旧可观察对象的值分配给它。并且您订阅了这个新的 observable。
然后,在创建后您尝试更改 'old' 可观察对象,如果您订阅它的更改 - 您将看到它们。但是,在 newCourse 中创建的可观察对象保持不变。
尝试替换
self.newCourseNameText("");
self.newCourseLecturerText("");
和
self.newCourse.name("");
self.newCourse.lecturer("");
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);
在课程构造函数中,您创建了全新的可观察对象,然后仅将旧可观察对象的值分配给它。并且您订阅了这个新的 observable。
然后,在创建后您尝试更改 'old' 可观察对象,如果您订阅它的更改 - 您将看到它们。但是,在 newCourse 中创建的可观察对象保持不变。
尝试替换
self.newCourseNameText("");
self.newCourseLecturerText("");
和
self.newCourse.name("");
self.newCourse.lecturer("");