问题:在创建对象的其他实例并将其添加到数组时,数组中对象的所有实例都成为最后添加的对象(我相信我总是创建一个单例,虽然我不是尝试)。
示例:
var people = ko.observableArray([]);
var Bob = new Person('Bob','supervisor');
var Tina = new Person('Tina','sales lead');
people.push(Bob);
people.push(Tina);
//Both "persons" in "people" will be "Tina" and "Bob" is nowhere
这是Person对象(在coffeescript中)
define (require) =>
class Person
constructor: (name, title)->
@name name
@title title
name: ko.observable()
title: ko.observable()
创建此输出:
var _this = this;
define(function(require) {
var Person;
return Person = (function() {
function Person(name, title) {
this.name(name);
this.title(title);
}
Person.prototype.name = ko.observable();
Person.prototype.title = ko.observable();
return Person;
})();
});
答案 0 :(得分:4)
问题是您正在制作name
和title
类级别属性,而不是在实例级别。因此,您有效地让每个Person
实例共享相同的名称和标题可观察对象。
要创建实例属性,您需要在其中设置构造函数。
class Person
constructor: (name, title) ->
@name = ko.observable name
@title = ko.observable title