Knockout.js 实例化一个对象的多个实例并推送到ko.observearray

Knockout.js 实例化一个对象的多个实例并推送到ko.observearray,knockout.js,coffeescript,singleton,instantiation,Knockout.js,Coffeescript,Singleton,Instantiation,问题:在创建对象的附加实例并将其添加到数组中时,数组中对象的所有实例都将成为最后添加的对象(我相信我总是在创建一个单例,尽管我并不尝试这样做) 例如: var people = ko.observableArray([]); var Bob = new Person('Bob','supervisor'); var Tina = new Person('Tina','sales lead'); people.push(Bob); people.push(Tina); //Both "per

问题:在创建对象的附加实例并将其添加到数组中时,数组中对象的所有实例都将成为最后添加的对象(我相信我总是在创建一个单例,尽管我并不尝试这样做)

例如:

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中)

创建此输出:

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;

  })();
});

问题是您正在创建
name
title
类级属性,而不是在实例级。因此,您可以有效地让每个
实例共享相同的名称和标题

要创建实例属性,需要在其中设置构造函数

class Person
    constructor: (name, title) ->
        @name = ko.observable name
        @title = ko.observable title

问题是您正在创建
name
title
类级属性,而不是在实例级。因此,您可以有效地让每个
实例共享相同的名称和标题

要创建实例属性,需要在其中设置构造函数

class Person
    constructor: (name, title) ->
        @name = ko.observable name
        @title = ko.observable title

我认为这与咖啡脚本无关。我怀疑您没有正确使用knockout.js。这在普通的咖啡脚本中效果很好:。你是对的,亚历克斯,我明白了。我需要深入研究一下击倒球的那只耳环,看看那是不是罪魁祸首。谢谢。当我把“名称”和“标题”改为普通变量而不是“可观察的”时,一切都很好。很有意思。我觉得这和咖啡脚本无关。我怀疑您没有正确使用knockout.js。这在普通的咖啡脚本中效果很好:。你是对的,亚历克斯,我明白了。我需要深入研究一下击倒球的那只耳环,看看那是不是罪魁祸首。谢谢。当我把“名称”和“标题”改为普通变量而不是“可观察的”时,一切都很好。非常有趣。